Das Verhalten von NULL verursacht immer wieder Verwirrung. Obwohl die grundlegende Idee der NULL – fehlende Daten zu repräsentieren – recht einfach ist, gibt es einige Besonderheiten. Anstatt des Ist-gleich-Operators (= NULL) muss man zum Beispiel IS NULL verwenden. Bei der Oracle Datenbank gehen die „Besonderheiten“ aber noch weiter. Einerseits, weil sie NULL nicht immer so behandelt, wie es der Standard vorsieht. Andererseits aber auch, weil sie einen ganz „speziellen“ Umgang mit NULL in Indizes hat.
Der SQL-Standard definiert NULL nicht als Wert, sondern als Platzhalter für einen fehlenden Wert. Folgerichtig kann kein Wert NULL sein. Die Oracle Datenbank behandelt einen leeren String aber wie NULL:
SELECT '0 IS NULL???' AS "what is NULL?" FROM dual
WHERE 0 IS NULL
UNION ALL
SELECT '0 is not null' FROM dual
WHERE 0 IS NOT NULL
UNION ALL
SELECT ''''' IS NULL???' FROM dual
WHERE '' IS NULL
UNION ALL
SELECT ''''' is not null' FROM dual
WHERE '' IS NOT NULLUm die Verwirrung zu vervollständigen, gibt es natürlich auch einen Fall, bei dem die Oracle Datenbank eine NULL wie einen leeren String behandelt:
SELECT dummy
, dummy || ''
, dummy || NULL
FROM dualDie Verbindung der Spalte DUMMY (immer mit 'X' gefüllt) mit NULL sollte NULL ergeben.
Das Konzept der NULL kommt in vielen Programmiersprachen vor. Aber egal wohin man blickt, ein leerer String ist niemals NULL. Ausgenommen bei der Oracle Datenbank. Hier ist es sogar unmöglich, einen leeren String in einem VARCHAR2-Feld abzuspeichern. Wenn man es versucht, wird einfach NULL gespeichert.
Diese Besonderheiten ist nicht nur merkwürdig, sondern sogar gefährlich. Insbesondere da die NULL-Kuriosität bei der Indizierung weitergeht.

