Урок 1.5 · Время чтения: ~7 мин
NULL — это специальный маркер, который реляционные базы данных используют, когда значение отсутствует, неизвестно или неприменимо. В этом уроке вы поймёте, что именно означает NULL, чем он отличается от обычных значений и как безопасно работать с ним в проверках и простых запросах.
Значения NULL в реляционных базах данных: смысл, IS NULL и логика
В предыдущих уроках мы разобрали устройство реляционных баз данных и типы данных. Теперь важно понять, что происходит, когда в столбце нет нормального осмысленного значения.

Что означает NULL в реляционной базе данных?
NULL не является обычным значением. Это специальный маркер, который сообщает базе данных, что значение отсутствует, неизвестно или неприменимо.
Это важно, потому что NULL ведёт себя не так, как текст, числа или логические значения. Для сравнений, фильтрации и вычислений у него свои правила.
Чем NULL не является?
Чтобы не путаться, важно помнить, чем NULL не является:
- NULL — это не 0: ноль — это обычное числовое значение.
- NULL — это не пустая строка:
''всё равно остаётся текстом, даже если в нём нет символов. - NULL — это не false: в логике баз данных NULL обычно означает неизвестно, а не истину или ложь.
Зачем базы данных используют NULL?
Базы данных используют NULL, когда значение нельзя заполнить как обычное поле.
Типичные случаи:
- Неизвестная информация: например, отчество клиента пока неизвестно.
- Неприменимо: ИНН компании не относится к частному лицу.
- Пропущенные данные: какая-то информация была пропущена при вводе.
Как работают IS NULL и IS NOT NULL?
Поскольку NULL обозначает неизвестное состояние, стандартные операторы сравнения, такие как = и <>, работают с ним некорректно.
Например, выражение value = NULL не вернёт истину. Чтобы правильно проверять NULL, используются специальные операторы.
IS NULL
IS NULL используется для поиска строк, где столбец не содержит значения:
SELECT *
FROM address
WHERE address2 IS NULL;
IS NOT NULL
IS NOT NULL используется для поиска строк, где в столбце есть какое-то значение:
SELECT *
FROM address
WHERE address2 IS NOT NULL;
Как NULL ведёт себя в вычислениях и логике?
Одно из самых важных правил: NULL часто распространяется. Если значение NULL участвует в вычислении, результат тоже обычно становится NULL.
10 + NULL = NULL5 * NULL = NULL'Привет, ' + NULL = NULL
Та же идея влияет и на сравнения. Поскольку NULL означает «неизвестно», многие выражения с NULL возвращают не истину и не ложь, а неизвестный результат.
Ключевые выводы этого урока:
NULLобозначает отсутствующие, неизвестные или неприменимые данные.NULLотличается от нуля, пустой строки и логического false.- Стандартные сравнения вроде
=и<>не подходят для проверки NULL. - Для работы с NULL используются
IS NULLиIS NOT NULL. - Вычисления с NULL часто дают NULL в качестве результата.
Часто задаваемые вопросы
NULL — это то же самое, что пустая строка?
Нет. Пустая строка — это текстовое значение нулевой длины. NULL означает, что известного значения нет вообще.
Почему value = NULL не работает?
Потому что NULL означает «неизвестно», а обычные операторы сравнения не предназначены для проверки такого состояния. Для этого используется IS NULL.
Может ли NULL храниться в числовом столбце?
Да. NULL не привязан к одному типу данных. Он может встречаться в числовых, текстовых и временных столбцах, если это не запрещено ограничением.
Вопросы для собеседования
Как объяснить NULL на собеседовании?
NULL — это специальный маркер, обозначающий отсутствующие, неизвестные или неприменимые данные. Он не равен нулю, false или пустой строке и подчиняется особым правилам в сравнениях и вычислениях.
Почему в запросах используют IS NULL, а не = NULL?
Потому что NULL означает неизвестное состояние. Операторы = и <> работают с обычными значениями, а для проверки NULL в SQL используются специальные операторы IS NULL и IS NOT NULL.
Какая ошибка чаще всего встречается при работе с NULL?
Частая ошибка — обращаться с NULL как с обычным значением в фильтрах, условиях и арифметике. Это приводит к неожиданным результатам в запросах и вычисляемых полях.
В следующем уроке мы познакомимся с самим SQL и посмотрим на базовую структуру запроса.