Auditor de Controle Externo - Tecnologia da Informação
Considere um banco de dados com três tabelas, T1, T2 e T3, respectivamente com 7, 13 e 19 linhas. Nas três tabelas, a coluna é definida como UNIQUE.Nessas circunstâncias, a execução do comando SQLSELECT * FROM T1LEFT JOIN T2 ON T1.A=T2.ARIGHT JOIN T3 ON T1.A=T3.Adeverá produzir um resultado que contenha, além da linha de títulos, no mínimo e no máximo:
A7 e 13 linhas;
B13 e 19 linhas;
C19 e 19 linhas;
D26 e 133 linhas;
E39 e 1.729 linhas.
Revelar gabarito e comentário▾
GabaritoC — 19 e 19 linhas;
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
SQL: Cardinalidade de Joins com Colunas UNIQUE
Gabarito: letra C. O resultado final da consulta terá exatamente 19 linhas, tanto no mínimo quanto no máximo, devido às restrições UNIQUE nas colunas A de todas as tabelas e à ordem dos joins.
A questão testa o entendimento de como LEFT JOIN e RIGHT JOIN se comportam quando as colunas envolvidas são UNIQUE. Vamos analisar passo a passo:
LEFT JOIN entre T1 (7 linhas) e T2 (13 linhas): Como T2.A é UNIQUE, cada linha de T1 pode corresponder a no máximo uma linha de T2. O LEFT JOIN preserva todas as linhas de T1, resultando em exatamente 7 linhas (cada T1 aparece uma vez, com dados de T2 onde houver correspondência ou NULL caso contrário).
RIGHT JOIN do resultado anterior com T3 (19 linhas): O RIGHT JOIN toma todas as linhas de T3 e as combina com as linhas da esquerda (resultado anterior) quando T1.A = T3.A. Como T3.A é UNIQUE, cada linha de T3 pode corresponder a no máximo uma linha da esquerda. Logo, o RIGHT JOIN produz uma linha para cada linha de T3, totalizando 19 linhas. Linhas de T3 sem correspondência aparecem com NULLs nas colunas de T1 e T2; linhas da esquerda que não correspondem a nenhum T3 são descartadas.
Portanto, independentemente dos valores em A, o número de linhas finais é sempre 19, pois é o número de linhas da tabela T3 (a tabela à direita do RIGHT JOIN). Não há possibilidade de multiplicação de linhas porque:
T1.A é UNIQUE → cada T1 aparece uma vez no resultado intermediário.
T2.A é UNIQUE → cada T1 pode se ligar a no máximo um T2.
T3.A é UNIQUE → cada T3 pode se ligar a no máximo uma linha da esquerda.
Assim, o mínimo e o máximo coincidem em 19 linhas.
Alternativa A — ❌ Incorreta
Sugere 7 (mínimo) e 13 (máximo). O mínimo não pode ser 7 porque o RIGHT JOIN força a inclusão de todas as 19 linhas de T3.
Alternativa B — ❌ Incorreta
Sugere 13 e 19. O mínimo não é 13, pois o RIGHT JOIN com T3 (19 linhas) já garante no mínimo 19 linhas.
Alternativa C — ✅ Correta ⟵ GABARITO
19 e 19, conforme explicado.
Alternativa D — ❌ Incorreta
26 e 133. Esses valores poderiam surgir de um produto cartesiano (7×13 = 91? 7×19 = 133?) mas não se aplicam aqui devido às restrições UNIQUE.
Alternativa E — ❌ Incorreta
39 e 1.729 (7+13+19=39? e 13×133=1729?). Totalmente descabido.
NÃO CAIA NESSA!
O candidato pode achar que o LEFT JOIN seguido de RIGHT JOIN multiplica linhas, mas a restrição UNIQUE em todas as colunas A impede qualquer multiplicação. O resultado final é exatamente o número de linhas da tabela T3.