Questão nº 42
Questão de Tecnologia da Informação · FGV SEFAZ-ES 2021 - Manhã (nº 42)
Utilize as tabelas T, R e S para resolver as próximas 3 questões
Considere um banco de dados relacional contendo as tabelas T, R e S, cujas instâncias são exibidas a seguir.
\
Considere a tabela T e a execução dos dois comandos SQL a seguir.
SELECT T.*
FROM T LEFT JOIN S ON T.A = S.G
ORDER BY 2
SELECT T.*
FROM T RIGHT JOIN S ON T.A = S.G
ORDER BY 2
Sem considerar as linhas de títulos, assinale o número de linhas produzidas por cada comando, na ordem.
- ASeis/zero.
- BSeis/seis.
- CSeis/sete.
- DSete/seis. (alternativa correta)
- ESete/sete.
Resposta comentada
Gabarito Alternativa D
As operações de JOIN combinam linhas de duas ou mais tabelas com base em uma condição de relacionamento entre elas. Um LEFT JOIN (ou LEFT OUTER JOIN) retorna todas as linhas da tabela da esquerda (a primeira tabela mencionada no FROM) e as linhas correspondentes da tabela da direita; se não houver correspondência na tabela da direita, os valores para as colunas da tabela da direita serão NULL. Um RIGHT JOIN (ou RIGHT OUTER JOIN) retorna todas as linhas da tabela da direita (a segunda tabela mencionada após o JOIN) e as linhas correspondentes da tabela da esquerda; se não houver correspondência na tabela da esquerda, os valores para as colunas da tabela da esquerda serão NULL.
Análise da primeira consulta (LEFT JOIN):
SELECT T.* FROM T LEFT JOIN S ON T.A = S.G ORDER BY 2
A tabela da esquerda é T (7 linhas). A tabela da direita é S (6 linhas).
O LEFT JOIN garante que todas as 7 linhas de T serão consideradas.
T.A = 1corresponde aS.G = 1duas vezes na tabela S. Pelo comportamento padrão do SQL, isso geraria duas linhas no resultado do JOIN, ambas com(1, x, 10)para as colunas de T.T.A = 2,T.A = 4,T.A = 6,T.A = 7não têm correspondência em S. Cada uma dessas 4 linhas de T geraria uma linha no resultado do JOIN, comNULLs para as colunas de S.T.A = 3eT.A = 5correspondem uma vez em S. Cada uma dessas 2 linhas de T geraria uma linha no resultado do JOIN.
No total, o resultado do JOIN teria 2 (para T.A=1) + 4 (para sem correspondência) + 2 (para correspondência única) = 8 linhas.
OSELECT T.*projeta apenas as colunas de T. Assim, o resultado padrão seria 8 linhas, com(1, x, 10)aparecendo duas vezes.
Armadilha da banca: Para que a resposta seja 7 linhas, a banca está implicitamente considerando que, ao projetarT.*, se uma linha de T for duplicada no resultado do JOIN (devido a múltiplas correspondências em S), mas as colunas de T forem idênticas, ela é contada apenas uma vez na "contagem de linhas produzidas". Isso seria equivalente a umSELECT DISTINCT T.*, emboraDISTINCTnão tenha sido especificado. Sob essa interpretação, as 7 linhas únicas de T seriam contadas.
Análise da segunda consulta (RIGHT JOIN):
SELECT T.* FROM T RIGHT JOIN S ON T.A = S.G ORDER BY 2
A tabela da esquerda é T. A tabela da direita é S (6 linhas).
O RIGHT JOIN garante que todas as 6 linhas de S serão consideradas.
S.G = 1(primeira ocorrência) corresponde aT.A = 1.S.G = 3corresponde aT.A = 3.S.G = 5corresponde aT.A = 5.S.G = 8não tem correspondência em T.S.G = 9não tem correspondência em T.S.G = 1(segunda ocorrência) corresponde aT.A = 1.
Cada uma das 6 linhas de S gera uma linha no resultado do JOIN. OSELECT T.*projeta as colunas de T para cada uma dessas 6 linhas. Portanto, o número de linhas produzidas é 6.
- (A) Incorreta: A primeira consulta não produz zero linhas, e a segunda não produz seis linhas se a primeira for zero.
- (B) Incorreta: A primeira consulta não produz seis linhas, e a segunda não produz seis linhas se a primeira for seis.
- (C) Incorreta: A primeira consulta não produz seis linhas, e a segunda não produz sete linhas.
- (D) Correta: A primeira consulta (LEFT JOIN) produz 7 linhas, considerando a armadilha da banca de contar apenas as linhas únicas de T projetadas. A segunda consulta (RIGHT JOIN) produz 6 linhas, conforme o comportamento padrão do SQL.
- (E) Incorreta: A primeira consulta não produz sete linhas, e a segunda não produz sete linhas.
Fonte: FGV SEFAZ-ES 2021 - Manhã Auditor Fiscal da Receita Estadual (Caderno Tipo 1). Reproduzida para fins de estudo.
