NOT IN по подзапросу с NULL перестал возвращать строки
Проверка «заказы не заблокированных клиентов» работала месяцами и вдруг стала возвращать 0. В справочнике dds.blocked_clients 12 строк, и после последней загрузки в одной из них client_id оказался NULL.
SELECT count(*)
FROM dds.orders o
WHERE o.client_id NOT IN (SELECT client_id FROM dds.blocked_clients);
Что вернёт запрос и почему?
- Заказы всех клиентов, кроме 11 заблокированных: строка с NULL просто не участвует в сравнении.
- Ошибку: подзапрос с NULL нельзя использовать в NOT IN.
- Все заказы без исключения: NULL в списке отключает фильтрацию, но остальные значения тоже перестают учитываться.
- 0 — сравнение с NULL даёт UNKNOWN, и условие NOT IN не выполняется ни для одной строки.
