Questão nº 50
Questão de Banco de Dados e Gestão da Informação · FGV SEFAZ-AM 2022 - Prova I (nº 50)
Analise o comando a seguir.
`SELECT * FROM T1 FULL OUTER JOIN T2 ON T1.A=T2.A`
Sabe-se que a coluna A foi definida como chave primária tanto em T1 como em T2, e que T1 e T2 contêm, respectivamente, 20 e 30 linhas.
Assinale a opção que apresenta a estimativa do número de linhas produzidas pela execução do comando acima.
- A20, exatamente.
- B30, exatamente.
- C600, exatamente.
- DEntre 20 e 30.
- EEntre 30 e 50. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Um FULL OUTER JOIN combina todas as linhas de duas tabelas, incluindo as que têm correspondência (match) e as que não têm, preenchendo com NULL as colunas da tabela onde não houve correspondência. Como A é chave primária em ambas, cada valor de A é único em sua tabela. O número de linhas resultantes será a união dos valores distintos de A presentes em T1 e T2.
- Cenário Mínimo: Ocorre quando todos os 20 valores de
AdeT1encontram correspondência emT2. Nesse caso, teremos 20 linhas correspondentes, mais as linhas deT2que não tiveram correspondência emT1. SeT1.Afor um subconjunto deT2.A, teremos 20 (correspondentes) + (30 - 20) (não correspondentes em T2) = 30 linhas. - Cenário Máximo: Ocorre quando nenhum valor de
AdeT1encontra correspondência emT2. Nesse caso, teremos 20 linhas deT1(comNULLparaT2) + 30 linhas deT2(comNULLparaT1) = 50 linhas.
Portanto, o número de linhas estará entre 30 e 50.
- (A) Incorreta: 20 é o número de linhas da menor tabela, mas o
FULL OUTER JOINsempre incluirá no mínimo todas as linhas da maior tabela se houver alguma correspondência, ou a soma das duas se não houver nenhuma. - (B) Incorreta: 30 é o número de linhas da maior tabela e representa o mínimo de linhas que podem ser retornadas, mas não é um valor exato, pois pode haver mais linhas se houver valores de
AemT1que não estão emT2. Armadilha da banca: Esta alternativa é tentadora porque 30 é o número de linhas da tabela maior, e em um cenário onde todos os registros da tabela menor (T1) encontram correspondência na tabela maior (T2), eT2tem registros adicionais, o resultado seria 30. No entanto, oFULL OUTER JOINtambém considera o caso em queT1tem registros que não estão emT2, o que aumentaria o número de linhas para além de 30. O termo "exatamente" a torna incorreta. - (C) Incorreta: 600 seria o resultado de um
CROSS JOIN(produto cartesiano), que não é o caso aqui, pois há uma condiçãoON. - (D) Incorreta: O limite inferior da estimativa é 30, não 20.
- (E) Correta: A estimativa correta varia entre o mínimo de 30 (quando todos os valores de
AdeT1estão emT2) e o máximo de 50 (quando nenhum valor deAdeT1está emT2).
Fonte: FGV SEFAZ-AM 2022 - Prova I Analista de Tecnologia da Informação da Fazenda Estadual (Caderno Tipo 1). Reproduzida para fins de estudo.