Ich glaube, die Antwort ist, dass Oracle sehr, sehr alt ist.
In den alten Tagen, bevor es einen SQL-Standard gab, traf Oracle die Entwurfsentscheidung, dass leere Zeichenfolgen in VARCHAR
/ VARCHAR2
Spalten vorhanden waren NULL
und dass es nur einen Sinn für NULL gab (es gibt relationale Theoretiker, die zwischen Daten unterscheiden würden, nach denen nie gefragt wurde). Daten, bei denen die Antwort vorhanden ist, dem Benutzer jedoch nicht bekannt ist, Daten, bei denen keine Antwort vorliegt usw., die alle einen Sinn für NULL
) darstellen.
Zu dem Zeitpunkt, als der SQL-Standard eingeführt wurde und zustimmte, dass NULL
und die leere Zeichenfolge unterschiedliche Entitäten waren, gab es bereits Oracle-Benutzer, deren Code davon ausging, dass beide gleichwertig waren. Oracle hatte also im Grunde die Möglichkeit, vorhandenen Code zu beschädigen, gegen den SQL-Standard zu verstoßen oder eine Art Initialisierungsparameter einzuführen, der die Funktionalität einer möglicherweise großen Anzahl von Abfragen ändern würde. Die Verletzung des SQL-Standards (IMHO) war die am wenigsten störende dieser drei Optionen.
Oracle hat die Möglichkeit offen gelassen, dass sich der VARCHAR
Datentyp in einer zukünftigen Version ändert, um dem SQL-Standard zu entsprechen (weshalb jeder VARCHAR2
in Oracle verwendet, da das Verhalten dieses Datentyps in Zukunft garantiert gleich bleibt).