È una soluzione perfettamente legittima per alcuni progetti.
Supponi di avere una gerarchia di relazioni uno-a-molti come Customer - Order - Basket - Item - Price , ecc., che possono essere incompiuti a qualsiasi livello:un Customer potrebbe non avere Orders , un Order non può avere Baskets , ecc.
In questo caso emetti qualcosa come:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Nota che potrebbe essere inefficiente in alcuni casi e potrebbe essere sostituito con EXISTS o NOT EXISTS (se vuoi solo capire che i record corrispondenti esistono o non esistono in altre tabelle).
Vedi questo articolo nel mio blog per i dettagli sulle prestazioni:
- Trovare ordini incompleti
- come trarre vantaggio dalla sostituzione di
LEFT JOIN's conNOT EXISTS