Почти во всех современных языках ноль логически относится к указателям (или ссылкам), не имеющим значения, или к переменной, которая не инициализирована. 0 - целочисленное значение нуля, а false - логическое значение, ну, в общем, false. Чтобы усложнить задачу, в C, например, null, 0 и false представлены одинаково. Я не знаю, как это работает в PHP.
Затем, чтобы еще больше усложнить задачу, в базах данных есть концепция нуля, что означает отсутствие или неприменимость, и большинство языков не имеют прямого способа сопоставить DBNull их нулю. Например, до недавнего времени не было никакого различия между int, равным null, и нулем, но это изменилось с помощью null-значений.
Извините, что усложнил этот звук. Просто в течение многих лет это было серьезной проблемой в языках, и до недавнего времени нигде не было четкого разрешения. Раньше люди просто собирали вещи вместе или делали пустыми, или 0 представляли собой нулевые значения в базе данных, что не всегда работает слишком хорошо.