Analise os dois comandos SQL a seguir. SELECT T1.A AS X, T2...
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:
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