Вступить в клуб →
средняявопросSQL и оптимизация запросов

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, значит условие «не входит» истинно для всех

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела