Я полагаю, что ответ таков: Оракул очень, очень стар.
В прежние времена, когда существовал стандарт SQL, Oracle приняла решение о том, что пустые строки в столбцах VARCHAR
/ VARCHAR2
равны NULL
и что существует только одно значение NULL (существуют теоретики отношений которые будут различать данные, которые никогда не запрашивались, данные, где ответ существует, но не известен пользователю, данные, где ответа нет, и т. д., все из которых составляют некоторый смысл NULL
).
К тому времени, когда стандарт SQL пришел и согласился с тем, что NULL
и пустая строка - это разные сущности, уже были пользователи Oracle, у которых был код, который предполагал, что эти два значения эквивалентны. Таким образом, у Oracle остались возможности нарушить существующий код, нарушить стандарт SQL или ввести какой-либо параметр инициализации, который изменит функциональность потенциально большого количества запросов. Нарушение стандарта SQL (IMHO) было наименее разрушительным из этих трех вариантов.
Oracle оставила открытой возможность того, что тип данных VARCHAR
изменится в будущем выпуске, чтобы соответствовать стандарту SQL (именно поэтому все используют VARCHAR2
в Oracle, поскольку поведение этого типа данных гарантированно останется таким же иду вперед).