Come dici giustamente tu è fondamentale filtrare gli input, mentre per gli output ci sono varie scuole di pensiero.
In linea di massima se sei certo che il dato dentro al tuo database è corretto per come la vedo io non è strettamente necessario filtrarlo in uscita, fermo restando che ti potrebbe comunque essere utile usare dei filtri di formattazione "estetici" (format delle date, del codice html etc).
Se hai tempo e risorse può non essere male fare un controllo anche sui dati in uscita, specialmente se questi possono essere stati modificati dopo essere stati inseriti nel database (sia in maniera autorizzata che malevola) ma questo secondo me dipende anche molto dal tipo di applicazione che stai realizzando, nella maggior parte dei casi filtrare correttamente gli input/update è sufficiente.
Venendo ai filtri, la differenza principale tra i sanitize ed i validate è che:
I filtri sanitize, come dice il nome, cercheranno di rendere il dato in ingresso corretto, modificandolo se necessario.
I filtri validate controlleranno solo che il dato sia corretto, se così non fosse non verrà fatto alcun tentativo di modifica per renderlo tale, il filtro risponderà semplicemente che non è stato superato il controllo.
Usarne uno piuttosto di un altro dipende dalla struttura della tua applicazione e dal tipo di dato da filtrare.