C'est une solution parfaitement légitime pour certaines conceptions.
Supposons que vous ayez une hiérarchie de relations un-à-plusieurs comme Customer - Order - Basket - Item - Price , etc., qui peut être vide à n'importe quel niveau :un Customer peut n'avoir aucune Orders , une Order ne peut pas avoir de Baskets , etc.
Dans ce cas, vous émettez quelque chose comme :
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Notez qu'il peut être inefficace dans certains cas et peut être remplacé par EXISTS ou NOT EXISTS (si vous voulez seulement savoir si les enregistrements correspondants existent ou n'existent pas dans d'autres tables).
Consultez cet article sur mon blog pour plus de détails sur les performances :
- Rechercher des commandes incomplètes
- comment bénéficier du remplacement de
LEFT JOINavecNOT EXISTS