Нуль - это заполнитель, который обычно означает "данные об этом недоступны".
Использование null для этого является всего лишь соглашением, но довольно распространенным, так что некоторые языки программирования поддерживают соглашение непосредственно. Причина, по которой это соглашение существует, ИМХО исторически связана с «указателями»;
во многих случаях будет определена процедура для возврата указателя на ответ, и она будет возвращать то, что традиционно называется нулевым указателем, если по какой-либо причине не может дать ответ.
Пусто означает (если это набор), что у него нет членов. Это явный ответ, и он сильно отличается от того, что «никаких данных об этом нет».
В мире PHP явно неинициализированные переменные имеют значение Null, и isset для такой переменной возвращает FALSE.
Для массивов и строк PHP следует соглашению, согласно которому «пусто» означает «не имеет членов», хотя массивы и строки технически не установлены.
У PHP очевидно есть забавная идея, что 0 и 0.0 также «пустые», согласно дизайну PHP. Это оскорбительно для понятия «пустое» ИМХО: отдельные числа не являются множествами, поэтому 0 не может быть разумно «пустым». Это просто приводит к неясному программированию, потому что оно нарушает принцип наименьшего удивления. Я уверен, что дизайнеры PHP считают, что «ноль - это пустое число», как некая расплывчатая аналогия; но если аналогия расплывчата, зачем ее беспокоить? Но тогда PHP полон глупых идей.