В мануале
сказано, что флаг FILTER_NULL_ON_FAILURE применяется с фильтром FILTER_VALIDATE_BOOLEAN (понятно зачем: без этого флага и filter_var(false, FILTER_VALIDATE_BOOLEAN) и filter_var(какая-нибудь_не_булевская_хрень, FILTER_VALIDATE_BOOLEAN) одинаково возвращают false, и мы не можем различить, успешна ли валидация).
Это не совсем правда. На самом деле, этот флаг [корректно] работает и с другими фильтрами. Лично я проверял FILTER_VALIDATE_INT и FILTER_VALIDATE_FLOAT.
Что это нам даёт? Можно повысить универсальность кода, если конкретный фильтр нам передаётся динамически, то мы можем [наверное] всегда добавлять сей флаг и всегда проверять результат на null.