Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2022

Banco de DadosSQL
Código
fg055278
Banca
FGV
Órgão
TCE-TO
Ano
2022
Nível
Superior
Cargo
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:
  1. A7 e 13 linhas;
  2. B13 e 19 linhas;
  3. C19 e 19 linhas;
  4. D26 e 133 linhas;
  5. 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:

  1. 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).

  1. 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.

Gabarito: letra C.

Link permanente: /questoes/fg055278