1=1, А=А, а «ничего» равно «ничему»? Как не терять данные (и деньги) из-за неправильного сравнения.

Представим две закрытые коробки. Что в них — неизвестно (это NULL). Можем ли мы сказать, что содержимое коробок одинаковое? Нет, потому что мы не знаем, что там. Может, в одной кот, а в другой — пустота. Поэтому в SQL NULL = NULL выдает не «Да», а «Не знаю» (Unknown).

В чем проблема для бизнеса? Данные просто исчезают. А потерянные данные — это потерянные деньги.

Например: есть список клиентов и список заказов. Мы хотим их объединить по ключу: имя, телефон, email. У части клиентов почта не заполнена (NULL). Обычное сравнение email = email не сработает — база «не узнает» пустые поля и просто выкинет эти заказы из отчета. Вы их даже не увидите.

Как это лечат «костылями»: Используют COALESCE(email, '-1'). Мы насильно называем пустоту «минус единицей». Минус: Это убивает индексы (база начинает тормозить). Риск: Если в данных реально появится -1, база склеит то, что не должно быть склеено.

Инженерное решение: Использовать a.email IS NOT DISTINCT FROM b.email. Эта фраза буквально означает: «Эти значения не различаются». Она понимает, что две пустые коробки — это одно и то же состояние.

Инсайт для бизнеса и жизни : Мы часто считаем тишину пустотой, но ведь отсутствие сигнала — это тоже сигнал, а отсутствие данных — это тоже данные.

Отсутствие продаж — это данные о продукте. Отсутствие реакций на пост в блоге — это данные о стратегии.

Например, я анализирую статистику блога и ищу критерии: почему один пост залетает на 15 000 просмотров и собирает комментарии, другой заходит на 1500 и приносит подписчиков, а третий увидели и промолчали 12 человек? Я учитываю не только «успех», но и «нулевой» результат.

Используйте пустоту наравне с фактами. Невидимые данные определяют систему так же, как и видимые.

📌 Тут я рассказывал на примере с пришельцами, почему NULL — это не ноль


В этом посте были ссылки, но мы их удалили по правилам Сетки