Analise os dois comandos SQL a seguir. SELECT T1.A AS X, T2...

Próximas questões
Com base no mesmo assunto
Q1933766 Banco de Dados
Analise os dois comandos SQL a seguir.

SELECT T1.A AS X, T2.A AS Y
FROM T1 LEFT JOIN T2 ON T1.A = T2.A
UNION ALL
SELECT T1.A AS X, T2.A AS Y
FROM T1 RIGHT JOIN T2 ON T1.A = T2.A

SELECT T1.A AS X, T2.A AS Y
FROM T1 FULL JOIN T2 ON T1.A = T2.A

Executados no SQL Server, os dois comandos acima produzem resultados equivalentes:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: E - em qualquer situação.

Para entender por que a alternativa E está correta, precisamos discutir o funcionamento dos tipos de JOIN mencionados na questão: LEFT JOIN, RIGHT JOIN, e FULL JOIN. Estes são comandos utilizados em SQL para combinar linhas de duas ou mais tabelas, com base em uma condição de relacionamento, geralmente uma chave estrangeira.

O LEFT JOIN retorna todas as linhas da tabela à esquerda (T1) junto com as linhas correspondentes da tabela à direita (T2). Se não houver correspondência, os resultados da tabela à direita terão valores NULL.

Por outro lado, o RIGHT JOIN retorna todas as linhas da tabela à direita (T2) e as linhas correspondentes da tabela à esquerda (T1). Se não houver correspondência, os resultados da tabela à esquerda terão valores NULL.

O FULL JOIN combina os resultados do LEFT JOIN e do RIGHT JOIN. Ele retorna todas as linhas quando há uma correspondência em uma das tabelas. Portanto, ele retorna todas as linhas da tabela à esquerda (T1) e todas as linhas da tabela à direita (T2), com as linhas correspondentes de um lado quando disponível. Se não houver correspondência, o resultado é NULL do lado sem correspondência.

A questão combina esses JOINS com o operador UNION ALL, que simplesmente concatena os conjuntos de resultados dos SELECTs. Note que o UNION ALL não remove duplicatas, diferentemente do UNION sozinho. Isso significa que o resultado final será uma união de todas as linhas de ambas as tabelas, independentemente de corresponderem ou não, que é exatamente o que o FULL JOIN faz.

Portanto, independentemente de quantas linhas cada tabela tem, se há duplicatas ou não, ou se uma das tabelas está vazia, a combinação dos resultados do LEFT JOIN com o RIGHT JOIN via UNION ALL sempre será equivalente ao resultado de um FULL JOIN. Isso justifica por que a alternativa E é a correta: os comandos produzirão resultados equivalentes em qualquer situação.

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

os dois comandos são correspondentes

A operação LEFT JOIN seleciona todas as tuplas da relação esquerda (T1), projetando os atributos indicados. A operação RIGHT JOIN faz o mesmo quanto à relação direita (T2). A operação FULL (OUTER) JOIN seleciona todas as tuplas das relações esquerda e direita, projetando os atributos indicados, ou seja, é a combinação (UNION) do resultado de LEFT JOIN e RIGHT JOIN. No SGBD MySQL, por exemplo, não existe um comando para executar diretamente a operação FULL JOIN. Para chegar ao seu resultado, é necessário fazer exatamente o que diz o enunciado.

GABARITO: E

Fazer um UNION ALL... de um LEFT JOIN + RIGHT JOIN = FULL JOIN, São equivalentes.

Importante lembrar que o UNION elimina tuplas duplicadas.

o FULL JOIN também elimina as duplicadas?

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo