Антипаттерн: использовать NULL без оглядки

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
9,447
Реакции
1,547
Credits
33,142
Антипаттерн: использовать NULL без оглядки
На первый взгляд NULL — это просто “нет значения”. Но в реальности — это тихий саботаж:
photo_2025-04-18_10-53-50.jpg
NULL != NULL. Да-да, сравнение NULL = NULL даст false или unknown. Это ломает привычную логику и может убить фильтры.
Агрегации ведут себя странно. COUNT(column) не считает NULL'ы. AVG, SUM — тоже их игнорируют. Итог: неверная статистика.
Индексы и WHERE column IS NULL. Не все СУБД эффективно используют индексы при таких запросах. Можно словить тормоза.
NOT IN + NULL = Бдыжжжж! Запрос WHERE id NOT IN (subquery) может вернуть пустой результат, если в подзапросе есть хотя бы один NULL.

Как избежать проблем:
1. Всегда осознанно работай с NULL — используй IS NULL и IS NOT NULL, не = и !=.
2. По возможности избегай NULL в колонках, где это не нужно. Лучше использовать значения по умолчанию.
3. Добавляй проверки в коде: COALESCE, IFNULL, NVL и аналоги.
4. Понимай, как твоя СУБД работает с NULL в индексах и фильтрах.

Вывод: NULL — не пустота, а “неизвестность”. Обращайся с ним осторожно, иначе баги будут неявными и неприятными.

Сохрани, чтобы не отловить баг на проде