Utilizando o Microsoft SQL Server 2008 R2, com a criação dos...
SELECT p.Cliente, s.Nome AS Sanduiche, p.Quantidade
FROM Pedidos p
RIGHT JOIN Sanduiches s ON p.IdSanduiche = s.IdSanduiche
ORDER BY s.Nome;
Selecione a alternativa CORRETA.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A
Tema central: interpretação de JOIN externos no SQL Server, em especial o RIGHT OUTER JOIN, e seus efeitos sobre linhas preservadas e valores NULL.
Resumo teórico: Em um INNER JOIN, aparecem apenas linhas que têm correspondência nas duas tabelas. Em um OUTER JOIN, todas as linhas da “tabela preservada” aparecem, e as colunas da outra tabela vêm como NULL quando não houver correspondência. No RIGHT JOIN, a tabela à direita de JOIN é a preservada. Logo, todas as linhas de Sanduiches aparecem; se não existir pedido correspondente, as colunas de Pedidos (Cliente, Quantidade) ficam NULL. O ORDER BY apenas ordena o resultado, não altera o conjunto retornado.
Fontes: Microsoft Docs – FROM (Transact‑SQL) e tipos de JOIN no SQL Server (RIGHT/LEFT/OUTER). Ver “JOIN fundamentals” na documentação oficial da Microsoft.
Por que a alternativa A é correta: O comando usa RIGHT JOIN Sanduiches s, logo a tabela Sanduiches é a preservada. A seleção retorna p.Cliente, s.Nome e p.Quantidade. Para sanduíches sem pedido, p.Cliente e p.Quantidade serão NULL. Portanto, “todos os sanduíches aparecem, mesmo sem pedido, com NULL para cliente” descreve corretamente o resultado.
Análise das alternativas incorretas:
B) “Somente pedidos sem sanduíche definido aparecem.” Incorreto. O RIGHT JOIN preserva Sanduiches, não “pedidos sem sanduíche”. Para mostrar apenas linhas sem correspondência, seria necessário um filtro como WHERE p.IdSanduiche IS NULL após um LEFT JOIN invertendo a ordem das tabelas, o que não ocorre.
C) “Gera erro por usar RIGHT JOIN.” Falso. RIGHT OUTER JOIN é sintaxe T‑SQL suportada no SQL Server 2008 R2 e versões posteriores. Não há erro sintático nisso.
D) “Apenas os sanduíches que foram pedidos aparecem.” Isso descreve um INNER JOIN (ou um RIGHT JOIN com filtro eliminando NULLs de Pedidos), o que não é o caso. O comando preserva todos os sanduíches, tenham ou não pedidos.
Estratégias para a prova:
• Identifique a tabela preservada: no RIGHT JOIN, é a tabela à direita do JOIN. No LEFT JOIN, é a da esquerda.
• Reescreva mentalmente: RIGHT JOIN (A RIGHT JOIN B) ≡ LEFT JOIN invertendo a ordem (B LEFT JOIN A). Isso ajuda a prever onde surgirão NULLs.
• Verifique as colunas selecionadas: as da tabela não preservada poderão vir NULL quando não houver correspondência.
• Não caia na pegadinha “gera erro”: RIGHT/LEFT OUTER JOIN são plenamente suportados.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo