Es treten jedoch Probleme auf, wenn man die Logik umkehrt und NOT IN und NOT EXISTS verwendet, was unterschiedliche Ergebnismengen zurückgibt. Die erste Abfrage gibt keine Zeilen zurück, die zweite die gewünschten Daten. Diese Abfragen sind nicht identisch!
Die NOT IN-Klausel ist im Prinzip äquivalent zum Vergleichen jedes Wertes mithilfe von „=“, was fehlschlägt, wenn ein Test FALSE oder NULL ist. Ein Beispiel:
All diese Abfragen geben keine Zeilen zurück. Bei der zweiten ist dies am deutlichsten, denn 1 != NULL ergibt NULL, so dass die gesamte WHERE-Bedingung für diese Zeile falsch ist. Die folgenden Abfragen hingegen würden funktionieren:
Die obige NOT IN-Abfrage lässt sich durchaus verwenden, solange man sicherstellt, dass nicht NULL in den Ergebnissen zurückgegeben wird. Die folgenden beiden Abfragen funktionieren ebenfalls, allerdings unter der Voraussetzung, dass empno nicht NULL ist, was in diesem Fall wohl zutreffen dürfte:
Wer die Unterschiede zwischen IN, EXISTS, NOT IN und NOT EXISTS verstanden hat, kann viele Stolperfallen vermeiden, die sich beim Auftreten von NULL-Werten in den Daten einer Unterabfrage ergeben.
Neueste Kommentare
Noch keine Kommentare zu Oracle-Tipp: Auswirkung von NULL-Werten auf IN und EXISTS
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.