Ik geloof dat het antwoord is dat Oracle heel, heel oud is.
Vroeger, voordat er een SQL-standaard was, nam Oracle de ontwerpbeslissing om strings in VARCHAR
leeg te maken /VARCHAR2
kolommen waren NULL
en dat er slechts één gevoel van NULL was (er zijn relationele theoretici die onderscheid zouden maken tussen gegevens waar nooit om is gevraagd, gegevens waarvan het antwoord bestaat maar niet bekend is bij de gebruiker, gegevens waar er geen antwoord is, enz. die een gevoel van NULL
. vormen ).
Tegen de tijd dat de SQL-standaard rondkwam en ermee instemde dat NULL
en de lege string waren verschillende entiteiten, er waren al Oracle-gebruikers die code hadden die aannam dat de twee equivalent waren. Dus bleef Oracle in feite over met de opties om bestaande code te breken, de SQL-standaard te schenden of een soort initialisatieparameter in te voeren die de functionaliteit van een potentieel groot aantal query's zou veranderen. Het schenden van de SQL-standaard (IMHO) was de minst storende van deze drie opties.
Oracle heeft de mogelijkheid opengelaten dat de VARCHAR
gegevenstype zou in een toekomstige release veranderen om te voldoen aan de SQL-standaard (daarom gebruikt iedereen VARCHAR2
in Oracle, aangezien het gedrag van dat gegevenstype gegarandeerd hetzelfde blijft in de toekomst).