Когда ты пишешь
WHERE column != 'value', ты можешь думать, что фильтруешь всё, что не равно 'value'. Но если в колонке есть NULL, такие строки выпадут из выборки. Почему? Потому что NULL != 'value' даёт… UNKNOWN, а не TRUE.❌ Пример проблемы:
SELECT * FROM users
WHERE status != 'active';
Если
status у кого-то NULL — он не попадёт в результат. Неочевидно, но критично.✔️ Как избежать:
1. Явно учитывай NULL'ы:
SELECT * FROM users
WHERE status != 'active' OR status IS NULL;
2. Работай с COALESCE, если допустимо:
SELECT * FROM users
WHERE COALESCE(status, '') != 'active';
📌 То же касается и
=: NULL = 'value' → UNKNOWN📌 Агрегации (
COUNT, AVG`) тоже игнорируют `NULL — помни об этом при аналитикеВывод:
NULL — не "ничего", а "неизвестно", и SQL строго это уважает. Не учитывая это, легко получить баг, который даже не заметишь сразу.
💡 Всегда проверяй поведение WHERE, JOIN и агрегатов с
NULL. Пиши явный код, особенно в проде.Сохрани, чтобы не ловить баги на ровном месте.
📲 Мы в MAX
#db
👉 @database_info
