NOT IN с подзапросом, где встречается NULL
Отчёт по заказам исключает клиентов из чёрного списка:
SELECT * FROM orders
WHERE customer_id NOT IN (SELECT customer_id FROM blacklist);
Запрос работал год, а сегодня начал возвращать ноль строк. Выяснилось, что в blacklist появилась запись, где customer_id равен NULL.
Что произошло?
- NULL в подзапросе просто игнорируется, значит причина в чём-то другом — например, в правах доступа к таблице blacklist
- База выбросит ошибку сравнения с NULL, поэтому отчёт и не отработал
- Сравнение с NULL даёт UNKNOWN, поэтому условие NOT IN не выполняется ни для одной строки и результат пустеет
- Запрос вернёт все заказы: NULL не равен ни одному customer_id, значит условие «не входит» истинно для всех
