Questão FC546278
Em um sistema de gerenciamento de banco de dados relacional compatível com SQL ANSI, você precisa selecionar dados de duas tabelas relacionadas: clientes (com colunas id_cliente, n
Linguagem SQL
FURB · 2025
Em um sistema de gerenciamento de banco de dados relacional compatível com SQL ANSI, você precisa selecionar dados de duas tabelas relacionadas: clientes (com colunas id_cliente, nome) e pedidos (com colunas id_pedido, id_cliente, data_pedido). O objetivo é obter uma lista completa de todos os clientes e todos os pedidos, mesmo que um cliente não tenha feito nenhum pedido ou que um pedido não esteja associado a um cliente existente (o que pode ocorrer devido a inconsistências nos dados). Para cada cliente, devem ser exibidos os pedidos associados (se houver), e para cada pedido, o cliente correspondente (se houver). Onde não houver correspondência, as colunas da tabela ausente devem exibir o valor NULL. Assinale a alternativa que atende corretamente o requisito descrito:
- A cláusula INNER JOIN retornaria apenas os clientes que possuem pedidos e os pedidos que estão associados a um cliente, excluindo clientes sem pedidos e pedidos sem cliente correspondente.
- A cláusula RIGHT JOIN, ao unir clientes à esquerda e pedidos à direita, retornaria todos os pedidos e os clientes correspondentes (se houver), com valores NULL nas colunas de clientes, para pedidos sem cliente correspondente.
- A cláusula LEFT JOIN, ao unir clientes à esquerda e pedidos à direita, retornaria todos os clientes e os pedidos correspondentes (se houver), com valores NULL nas colunas de pedidos, para clientes sem pedidos.
- A cláusula FULL OUTER JOIN retornaria todas as linhas de ambas as tabelas (clientes e pedidos). Para os clientes sem pedidos, as colunas de pedidos seriam NULL. Para os pedidos sem cliente correspondente, as colunas de clientes seriam NULL.
- A cláusula JOIN, ao unir clientes à esquerda e pedidos à direita, retornaria todos os pedidos e os clientes correspondentes (se houver), com valores NULL nas colunas de clientes, para pedidos sem cliente correspondente.
Mostrar resposta e comentário
Gabarito
D
Comentário do professor
A opção correta usa FULL OUTER JOIN porque essa cláusula retorna todas as linhas de ambas as tabelas, combinando quando há correspondência e mantendo as linhas isoladas quando não há. Assim, clientes sem pedidos aparecem com as colunas de pedidos preenchidas com NULL e pedidos sem cliente correspondente aparecem com as colunas de cliente como NULL.
O comportamento depende da condição de junção. Usando, por exemplo, ON clientes.id_cliente = pedidos.id_cliente, o mecanismo tenta casar os registros por esse campo; quando não encontra par, preserva a linha original e coloca NULL nas colunas da tabela oposta.
Esse tipo de junção é indicado quando se quer uma visão completa das duas entidades, sem perder registros por falta de correspondência, facilitando a identificação de inconsistências nos dados.
Conteúdo do catálogo FC Concursos · Atualizado em