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