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