🔍 Ловушка NULL в SELECT для QA

🔍 Ловушка NULL в SELECT: почему «= NULL» не работает

Многие начинающие (и не только) SQL-разработчики попадаются на коварстве NULL. NULL — маркер отсутствия данных.

❌ Ошибка: WHERE column = NULL — никогда не вернёт строк, даже если в колонке есть NULL. Потому что NULL не равен ничему, даже самому себе.

✅ Правильно: WHERE column IS NULL — проверка на отсутствие значения.

⚠️ В чём ловушка? SQL использует трёхзначную логику: TRUE / FALSE / UNKNOWN. Любое сравнение с NULL даёт UNKNOWN, а в условие WHERE попадают только строки с TRUE. Поэтому = NULL молча отбрасывает нужные записи — без ошибки, но с неверным результатом.

📌 Пример из реальной задачи Нужно найти заявки, где дата выполнения не проставлена (столбец Executiondate содержит NULL).

Вот так — неправильно:

SELECT Accountid, Incomingdate FROM Request WHERE Executiondate = NULL; – ❌ вернёт 0 строк

А так — правильно:

SELECT Accountid, Incomingdate FROM Request WHERE Executiondate IS NULL; – ✅ вернёт все незавершённые заявки

💡 Золотое правило Для проверки на NULL всегда используйте IS NULL или IS NOT NULL. Любое другое сравнение (=, <>, !=, IN, NOT IN) с участием NULL приведёт к неожиданным пустым результатам.

Берегите свои SELECT-ы! 🛡️

#SQL #БД #Ошибки #NULL