Non si può dare una risposta che valga per ogni situazione. Dipende molto da che sistema stai sviluppando e che funzionalità implementa. Se hai necessità di poter recuperare i dati cancellati, di moderarli prima di eliminarli definitivamente, oppure di implementare sincronie tra database diversi, allora utilizzare un flag può essere l'idea giusta. Negli altri casi, direi che l'approccio più classico e semplice sia eseguire cancellazioni.