При наличии нулей предикат IN будет возвращать только true или null; никогда false. Следовательно, что NOT IN вернёт только false или null; никогда true.
Что помешало "нулей" на NULL заменить?
И как дальше можно к такому переводу серьёзно относиться?
PostgreSQL: настройка и оптимизация производительности. Часть 2