É uma solução perfeitamente legítima para alguns designs.
Digamos que você tenha uma hierarquia de relações um-para-muitos como
Customer
- Order
- Basket
- Item
- Price
, etc., que podem ser não preenchidos em qualquer nível:um Customer
pode não ter Orders
, um Order
não pode ter Baskets
, etc Nesse caso, você emite algo como:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Observe que pode ser ineficiente em alguns casos e pode ser substituído por
EXISTS
ou NOT EXISTS
(se você deseja apenas descobrir se os registros correspondentes existem ou não existem em outras tabelas). Veja este artigo no meu blog para obter detalhes de desempenho:
- Encontrando pedidos incompletos
- como se beneficiar da substituição de
LEFT JOIN
's comNOT EXISTS