
Антипаттерн: NULL в WHERE — и ты в ловушке
Когда в таблице есть NULL, а в WHERE ты пишешь что-то вроде:
SQL:
SELECT * FROM users WHERE age != 30;
Но если age IS NULL — такие строки пропадут из выборки!
Почему? Потому что NULL != 30 не TRUE, это UNKNOWN.
А SQL возвращает строки только там, где WHERE → TRUE.
Как избежать?
1. Будь явно осторожен с NULL:
SQL:
SELECT * FROM users
WHERE age != 30 OR age IS NULL;
2. Логика на уровне схемы:
– Если поле нужно всегда — делай NOT NULL.
– Если допускаешь NULL, продумывай поведение выборок.
3. Не верь глазам своим:
Даже count(*) и count(column) ведут себя по-разному из-за NULL.
Вывод:
NULL — это не ноль, не пустая строка и не "ничего".
Это "мы не знаем". И SQL ведёт себя с ним очень осторожно.