Wierzę, że odpowiedź jest taka, że Oracle jest bardzo, bardzo stara.
W dawnych czasach, zanim istniał standard SQL, Oracle podjęło decyzję projektową, że puste ciągi w VARCHAR
/ VARCHAR2
kolumnach są NULL
i że istnieje tylko jedno wyczucie NULL (istnieją teoretycy relacyjni, którzy rozróżniają dane, o które nigdy nie pytano, dane, na które odpowiedź istnieje, ale nie są znane użytkownikowi, dane, na które nie ma odpowiedzi itp., z których wszystkie stanowią pewien sens NULL
).
Zanim pojawił się standard SQL i zgodził się na to, NULL
a pusty ciąg znaków był odrębną jednostką, już byli użytkownicy Oracle, którzy mieli kod, który zakładał, że oba są równoważne. Tak więc Oracle zasadniczo pozostawiono z opcją złamania istniejącego kodu, naruszenia standardu SQL lub wprowadzenia pewnego rodzaju parametru inicjującego, który zmieniłby funkcjonalność potencjalnie dużej liczby zapytań. Naruszenie standardu SQL (IMHO) było najmniej zakłócające z tych trzech opcji.
Oracle pozostawił otwartą możliwość VARCHAR
zmiany typu danych w przyszłej wersji, aby dostosować się do standardu SQL (dlatego wszyscy używają VARCHAR2
w Oracle, ponieważ zachowanie tego typu danych z pewnością pozostanie takie samo w przyszłości).