Оптимизаторът не трябва да избира да използва индекса на EMP.DEPT_ID във втората заявка, тъй като може да има NULL стойности. Това го кара да изключи един ред от резултатите.
Единственото обяснение без грешка, за което се сещам в момента, е, че по някакъв начин сте създали ограничения в режим DISABLE RELY, така че оптимизаторът да смята, че полето не може да съдържа NULL. В този случай би било правилно да се използва индексът предвид неправилната информация в ограниченията. Изглежда обаче, че опцията RELY не е налична за ограничения NOT NULL, така че не виждам как това може да е проблемът. Независимо от това, погледнете внимателно всички ограничения на таблиците.
Като оставим това настрана, има изненадващ брой бъгове на сайта на Oracle относно грешни резултати от пълни външни съединения. Може да удряте някой от тях. В доста от тези случаи заобиколното решение е да деактивирате „родните“ пълни външни съединения, което можете да направите за текущата си сесия с този оператор:
alter session set "_optimizer_native_full_outer_join"=off;