Jag tror att svaret är att Oracle är väldigt, väldigt gammalt.
Förr i tiden innan det fanns en SQL-standard tog Oracle designbeslutet att tömma strängar i VARCHAR
/VARCHAR2
kolumner var NULL
och att det bara fanns en känsla av NULL (det finns relationsteoretiker som skulle skilja mellan data som aldrig har efterfrågats, data där svaret finns men inte är känt av användaren, data där det inte finns något svar, etc. alla som utgör någon känsla av NULL
).
När SQL-standarden kom fram och gick med på att NULL
och den tomma strängen var distinkta enheter, det fanns redan Oracle-användare som hade kod som antog att de två var likvärdiga. Så Oracle lämnades i princip med alternativen att bryta befintlig kod, bryta mot SQL-standarden eller införa någon form av initialiseringsparameter som skulle ändra funktionaliteten för ett potentiellt stort antal frågor. Att bryta mot SQL-standarden (IMHO) var det minst störande av dessa tre alternativ.
Oracle har lämnat öppen möjligheten att VARCHAR
datatypen skulle ändras i en framtida version för att följa SQL-standarden (det är därför alla använder VARCHAR2
i Oracle eftersom den datatypens beteende garanterat kommer att förbli detsamma framöver).