Este é um exemplo simples, imagine que você deseja mostrar todos as frutas, mesmo as que tem a quantidade com o valor 0. Em algumas ocasiões não é possível pois os filtros aplicados no Where terminam eliminando todos os registros daquele tipo de classe. No exemplo abaixo exibiria Morango, mas não seria exibida Banana.
SELECT
id
Count(*) quantidade
FROM
frutas
WHERE
frutas.cor = ‘Vermelho’
GROUP BY ID
ORDER BY ID
A solução para isso é listar todas os registros do dicionário de frutas e fazer um left join com a consulta.
SELECT
dicionarioFrutas.id
dicionarioFrutas.nome
consultaFrutas.quantidade
FROM
(SELECT frutas.id, frutas.nome FROM frutas) dicionarioFrutas,
(
SELECT
id
Count(*) quantidade
FROM
frutas
WHERE
frutas.cor = ‘Vermelho’
GROUP BY ID
ORDER BY ID
) consulta
WHERE dicionarioFrutas.ID = consultaFrutas.ID (+) — LEFT JOIN do PL/SQL
ORDER BY dicionarioFrutas.ID
Assim teriamos como resultado:
Morango: 1
Banana: Null