Вот логика:
. . . WHERE hh.deleted = 0 OR hh.deleted IS NULL . . .
Я хочу сделать его более аккуратным и коротким, поэтому вот новая версия:
. . . WHERE hh.deleted <=> 0 . . .
Но результат не тот же. Есть идеи, почему? а чем отличается?
Это не одна и та же логика. Рассмотрим следующее
deleted deleted = 0 OR deleted IS NULL deleted <=> 0 0 1 1 1 0 0 NULL 1 0
Причина в том, что <=> просто возвращает 0, если один операнд равен NULL (вместо NULL, который deleted = 0 вернул бы, если deleted был NULL), тогда как deleted IS NULL вернет 1 в этой ситуации.
<=>
NULL
deleted = 0
deleted
deleted IS NULL
Демонстрация по dbfiddle