Optymalizator nie powinien decydować się na użycie indeksu EMP.DEPT_ID w drugim zapytaniu, ponieważ może on mieć wartości NULL. To właśnie powoduje wykluczenie jednego wiersza z wyników.
Jedyne wyjaśnienie bez błędów, jakie przychodzi mi na myśl, to to, że w jakiś sposób utworzyłeś ograniczenia w trybie DISABLE RELY, aby optymalizator myślał, że pole nie może zawierać wartości NULL. W takim przypadku poprawne byłoby użycie indeksu z nieprawidłowymi informacjami w ograniczeniach. Wygląda jednak na to, że opcja RELY nie jest dostępna dla ograniczeń NOT NULL, więc nie widzę, w jaki sposób może to stanowić problem. Niemniej jednak przyjrzyj się uważnie wszystkim ograniczeniom na stołach.
Poza tym na stronie Oracle jest zaskakująca liczba błędów dotyczących błędnych wyników z pełnych złączeń zewnętrznych. Możesz uderzyć jednego z nich. W wielu z tych przypadków obejściem jest wyłączenie „natywnych” pełnych sprzężeń zewnętrznych, co można zrobić dla bieżącej sesji za pomocą następującej instrukcji:
alter session set "_optimizer_native_full_outer_join"=off;