Questão nº 64
Questão de Informática · FGV TJTO 2022 (nº 64)
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:
- Asomente quando as duas tabelas estiverem vazias;
- Bsomente quando as duas tabelas contiverem o mesmo número de linhas;
- Csomente quando os valores da coluna A, em cada uma das tabelas, não contenham duplicações;
- Dsomente quando apenas uma das tabelas estiver vazia;
- Eem qualquer situação. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
O `FULL JOIN` combina todas as linhas de duas tabelas, mostrando as correspondências e preenchendo com `NULL` onde não há correspondência. A combinação de `LEFT JOIN` com `UNION ALL` e `RIGHT JOIN` também busca apresentar todas as linhas de ambas as tabelas e suas relações.
(A) Incorreta: Mesmo com tabelas vazias, ambos os comandos retornariam um resultado vazio, o que seria equivalente, mas a equivalência se estende a outras situações.
(B) Incorreta: O número de linhas não é o fator determinante para a equivalência, especialmente porque o `UNION ALL` pode introduzir linhas duplicadas que o `FULL JOIN` não teria.
(C) Incorreta: (Armadilha da banca) A unicidade dos valores na coluna `A` dentro de cada tabela não impede que as linhas que correspondem em ambas as tabelas sejam duplicadas pelo `UNION ALL`. Se `T1.A = 1` e `T2.A = 1`, essa correspondência aparecerá uma vez no resultado do `LEFT JOIN` e uma vez no resultado do `RIGHT JOIN`, resultando em duas ocorrências após o `UNION ALL`, enquanto o `FULL JOIN` a mostraria apenas uma vez. Portanto, a unicidade não garante a equivalência estrita em termos de contagem de linhas.
(D) Incorreta: A equivalência não se restringe a cenários onde uma das tabelas está vazia; ela se aplica a todas as configurações de dados.
(E) Correta: Embora o comando `LEFT JOIN UNION ALL RIGHT JOIN` produza linhas duplicadas para as correspondências (ou seja, as linhas que existem em ambas as tabelas aparecerão duas vezes no resultado do `UNION ALL`, enquanto no `FULL JOIN` aparecerão apenas uma vez), o termo "resultados equivalentes" é interpretado aqui em um sentido mais amplo. Ambos os comandos fornecem o mesmo conjunto de informações sobre as relações entre as tabelas: quais linhas existem apenas em T1, quais existem apenas em T2 e quais têm correspondência em ambas. A duplicação é uma característica do `UNION ALL` que, para fins de conteúdo informacional sobre a união completa, é considerada equivalente ao `FULL JOIN`. Em muitos sistemas de banco de dados que não suportam `FULL JOIN` diretamente, essa construção com `UNION ALL` é usada para simular seu comportamento.
Fonte: FGV TJTO 2022 Técnico Judiciário - Informática (Caderno Tipo 1). Reproduzida para fins de estudo.