Лично я думаю, что это потому, что дизайнеры фреймворка упустили момент с обнуляемыми данными!
Может показаться, что они предположили, что если поле не имеет значения NULL, оно должно быть обязательным.
К сожалению, как вы, вероятно, обнаруживаете, это не всегда так.
Наиболее распространенный случай, о котором я могу подумать, - это текстовое поле, предоставленное пользователем, которое может быть пустым, но вы хотите оставить его пустым, пока пользователь не предоставит значение. В этом случае вы получаете три действительных случая: «Не установлено» (NULL), «Пусто» (не NULL) или фактическое значение.
Так что - чтобы ответить на ваш вопрос, нет - я не могу это объяснить. Возможно, это ошибка?