Null обеспечивает простой выход для программистов, которые не полностью продумали логику и области, необходимые для их программы, или будущие последствия обслуживания при использовании значения, по существу, без четкого и согласованного определения.
Поначалу может показаться очевидным, что это должно означать «нет значения», но то, что это на самом деле означает, зависит от контекста. Если, например, LastName === null, означает ли это, что у этого человека нет фамилии, или мы не знаем, какая у него фамилия, или что она еще не введена в систему? Нуль равен самому себе или нет? В SQL это не так. На многих языках это так. Но если мы не знаем значение personA.lastName или personB.lastName, как мы можем узнать это personA.lastName === personB.lastName, а? Если результат будет ложным, или ... ноль?
Это зависит от того, что вы делаете, поэтому опасно и глупо иметь какое-то общесистемное значение, которое можно использовать для любой ситуации, которая выглядит как «ничто», так как другие части ваша программа и внешние библиотеки или модули не могут зависеть от правильного истолкования того, что вы имели в виду под «нулем».
Вам гораздо лучше четко определить ДОМЕН возможных значений lastName и точно, что на самом деле означает каждое возможное значение, а не зависеть от какого-то расплывчатого общесистемного представления о нуле, которое может иметь или не иметь никакого отношения к тому, что вы вы делаете, в зависимости от того, какой язык вы используете, и что вы пытаетесь сделать. Значение, которое на самом деле может вести себя совершенно неправильно, когда вы начинаете работать с вашими данными.