Optimizeren bør ikke vælge at bruge indekset på EMP.DEPT_ID i den anden forespørgsel, da det kan have NULL-værdier. Det er det, der får den til at ekskludere én række fra resultaterne.
Den eneste forklaring uden fejl, jeg kan komme i tanke om i øjeblikket, er, at du på en eller anden måde har oprettet begrænsninger i DISABLE RELY-tilstand, så optimizeren mener, at feltet ikke kan indeholde NULL. I dette tilfælde ville det være korrekt at bruge indekset givet de forkerte oplysninger i begrænsningerne. Det ser dog ud til, at RELY-indstillingen ikke er tilgængelig for NOT NULL-begrænsninger, så jeg kan ikke se, hvordan dette kan være problemet. Ikke desto mindre, tag et omhyggeligt kig på alle begrænsninger på bordene.
Bortset fra det, er der et overraskende antal fejl på Oracles websted vedrørende forkerte resultater fra fulde ydre joinforbindelser. Du rammer måske en af dem. I en hel del af disse tilfælde er løsningen at deaktivere "native" fulde outer joins, hvilket du kan gøre for din nuværende session med denne erklæring:
alter session set "_optimizer_native_full_outer_join"=off;