Jeg tror, at svaret er, at Oracle er meget, meget gammelt.
Tilbage i gamle dage, før der var en SQL-standard, tog Oracle designbeslutningen, at tomme strenge i VARCHAR
/VARCHAR2
kolonner var NULL
og at der kun var én følelse af NULL (der er relationsteoretikere, der vil skelne mellem data, der aldrig er blevet bedt om, data, hvor svaret findes, men ikke er kendt af brugeren, data, hvor der ikke er noget svar, osv. alle som udgør en følelse af NULL
).
På det tidspunkt, hvor SQL-standarden kom omkring og blev enige om, at NULL
og den tomme streng var adskilte enheder, der var allerede Oracle-brugere, der havde kode, der antog, at de to var ækvivalente. Så Oracle stod dybest set tilbage med mulighederne for at bryde eksisterende kode, overtræde SQL-standarden eller indføre en slags initialiseringsparameter, der ville ændre funktionaliteten af et potentielt stort antal forespørgsler. At overtræde SQL-standarden (IMHO) var den mindst forstyrrende af disse tre muligheder.
Oracle har ladet muligheden for, at VARCHAR
datatypen vil ændre sig i en fremtidig udgivelse for at overholde SQL-standarden (hvilket er grunden til, at alle bruger VARCHAR2
i Oracle, da denne datatypes adfærd garanteret vil forblive den samme fremover).