NULL в SQL и трёхзначная логика
Коротко: В SQL NULL означает «неизвестно», а не «пусто» или «ноль». Сравнения с NULL дают не истину и не ложь, а тоже «неизвестно».
Подробнее: В SQL три значения истинности: TRUE, FALSE, UNKNOWN. Строка попадает в результат WHERE только если условие TRUE.
Подробности
- Сравнения:
NULL = NULL— UNKNOWN, а не TRUE. Поэтому используйтеIS NULLиIS NOT NULL. Для равенства с учётом NULL:IS NOT DISTINCT FROM. - Типичная ловушка:
WHERE status <> 'x'не возвращает строки сstatus IS NULL. - NOT IN:
x NOT IN (1, 2, NULL)никогда не даёт TRUE, потому что сравнение с NULL — UNKNOWN. ЛучшеNOT EXISTS. - Арифметика:
5 + NULL— NULL.COALESCE(a, 0)заменяет NULL значением по умолчанию. - Агрегаты:
COUNT(*)считает строки,COUNT(столбец)— только значения не NULL.SUMиAVGигнорируют NULL. - Сортировка: NULL стоит в начале или в конце в зависимости от системы.
NULLS FIRST/LASTэто фиксирует. - Проектирование: По возможности объявляйте
NOT NULLсо значением по умолчанию.
См. также: понятие NULL, SQL