Em um sistema de gerenciamento de banco de dados relacional...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: D
Tema central: A questão aborda o uso de tipos de JOIN no SQL ANSI para combinar tabelas relacionais e exibir todos os registros, incluindo casos sem correspondência entre as tabelas. Esse conhecimento é crucial em concursos de TI, pois JOINs são essenciais para manipulação de dados em bancos relacionais.
Resumo teórico: JOINs permitem reunir informações de duas ou mais tabelas por meio de uma condição. Os principais tipos:
- INNER JOIN: Retorna apenas registros que possuem correspondência nas duas tabelas.
- LEFT JOIN: Retorna todos os registros da tabela da esquerda e os correspondentes da direita; onde não houver correspondência, retorna NULL para os campos da direita.
- RIGHT JOIN: Retorna todos os registros da tabela da direita e os correspondentes da esquerda; onde não houver correspondência, retorna NULL para os campos da esquerda.
- FULL OUTER JOIN: Retorna todos os registros das duas tabelas, com NULL nas colunas da tabela ausente quando não houver correspondência.
Justificativa da alternativa D:
A opção D descreve corretamente o comportamento do FULL OUTER JOIN: todas as linhas de ambas as tabelas são exibidas. Se não houver correspondência entre cliente e pedido, os campos da tabela ausente recebem NULL. Assim, atende perfeitamente ao requisito do enunciado.
Análise das alternativas incorretas:
- A: O INNER JOIN só retorna linhas que tenham correspondência nas duas tabelas, eliminando clientes sem pedidos e pedidos sem cliente. Não satisfaz o objetivo.
- B: O RIGHT JOIN retorna todos os pedidos, mas não inclui clientes sem pedidos.
- C: O LEFT JOIN retorna todos os clientes, mas não inclui pedidos sem cliente.
- E: A descrição mistura conceitos de JOIN; JOIN sem especificação é um INNER JOIN, o que não resolve o problema.
Estratégias para interpretação:
Procure por expressões como “todos os registros”, “mesmo sem correspondência” ou “NULL nas colunas ausentes”. Elas quase sempre indicam a necessidade de um FULL OUTER JOIN.
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
Comentários
Veja os comentários dos nossos alunos
* INNER JOIN: Retorna apenas as linhas onde há correspondência em ambas as tabelas. Isso excluiria clientes sem pedidos e pedidos sem clientes, o que não atende ao requisito.
* LEFT JOIN: Retorna todas as linhas da tabela da esquerda (clientes) e as linhas correspondentes da tabela da direita (pedidos). Se não houver correspondência na tabela da direita, as colunas da tabela da direita serão NULL. Isso atenderia à parte de "todos os clientes e seus pedidos", mas não à parte de "pedidos sem cliente correspondente".
* RIGHT JOIN: Retorna todas as linhas da tabela da direita (pedidos) e as linhas correspondentes da tabela da esquerda (clientes). Se não houver correspondência na tabela da esquerda, as colunas da tabela da esquerda serão NULL. Isso atenderia à parte de "todos os pedidos e seus clientes", mas não à parte de "clientes sem pedidos".
* FULL OUTER JOIN: É a união completa de LEFT JOIN e RIGHT JOIN. Ele retorna todas as linhas de ambas as tabelas, combinando-as onde há correspondência. Onde não há correspondência em uma das tabelas, as colunas da tabela ausente serão preenchidas com NULL. Isso garante que você veja:
* Clientes com pedidos.
* Clientes sem pedidos (com as colunas de pedidos como NULL).
* Pedidos sem cliente correspondente (com as colunas de clientes como NULL).
A alternativa E está incorreta porque "JOIN" por si só é ambíguo; geralmente se refere a um INNER JOIN se não for especificado, e mesmo se fosse um tipo específico (como RIGHT JOIN, que é o que ela descreve), não atenderia a todos os requisitos.
Uma breve explicação sobre Inner, Left, Right, Outer/Full e Cross Join → https://pt.stackoverflow.com/questions/6441/qual-é-a-diferença-entre-inner-join-e-outer-join#6448
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo