🔴 Антипаттерн: игнорирование поведения NULL в SQL Когда ты пишешь WHERE column !
Когда ты пишешь 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. Пиши явный код, особенно в проде.
Сохрани, чтобы не ловить баги на ровном месте.
#db
👉 @database_info