Observação muito interessante, embora não consegui reproduzi-la no meu banco de dados Oracle (versão 12.1.0.2.0). Devo mencionar que estou usando Oracle Linux 6.5 e não Windows. De qualquer forma, seria bom postar o plano de execução também, para esta consulta simples, mas interessante.
Muito obrigado por postar os planos de execução, isso explica muito bem o comportamento da consulta. Depois explicarei, começando pelo primeiro plano de execução:
|* 2 | HASH JOIN | | 1 | 17 | 8 (0)| 00:00:01 |
| 3 | VIEW | | 2 | 14 | 4 (0)| 00:00:01 |
| 4 | SORT UNIQUE | | 2 | | 4 (50)| 00:00:01 |
| 5 | UNION-ALL | | | | | |
| 6 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 7 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 8 | VIEW | | 2 | 20 | 4 (0)| 00:00:01 |
| 9 | SORT UNIQUE | | 2 | | 4 (50)| 00:00:01 |
| 10 | UNION-ALL | | | | | |
| 11 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 12 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
Como você pode ver, o otimizador opta por fazer uma junção interna, em vez da junção esquerda, e isso é mostrado pelo "HASH JOIN" e não pelo "HASH JOIN OUTER" como deveria ser.
Para ser honesto, eu não ouvi nada sobre um bug como este (até agora), então sugiro o seguinte:
- Confira o pfile/spfile se ele contiver alguns parâmetros não documentados.
- Há casos em que definir esses parâmetros pode melhorar o desempenho, mas muitas vezes, "karma é ...", como diz o ditado, e você pode ter comportamentos inesperados de execução/desempenho de uma maneira muito ruim.