Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2023

Banco de DadosConsultas e Comandos em SQL
Código
fg161103
Banca
FGV
Órgão
TJ RN
Ano
2023
Cargo
AJ ( )

Considere a estrutura e uma instância da tabela relacional FILIACAO exibida a seguir.

 

FILIACAO

Pessoa

Genitor

Alexandre

Francisco

Francisco

João

Joaquina

João

Carlota

Joaquina

João

Manuel

Paulo

Manuel

Maria

Paulo

 

Com relação à tabela FILIACAO, analise o comando SQL a seguir.


select distinct t3.Pessoa, t4.Pessoa
FROM FILIACAO t1, FILIACAO t2, FILIACAO t3, FILIACAO t4
WHERE t1.Pessoa < t2.Pessoa

and t1.Genitor = t2.Genitor
and t3.Genitor = t1.Pessoa
and t4.Genitor = t2.Pessoa


Afora a linha de títulos, o número de linhas produzidas pela execução do referido comando SQL é:

  1. A3;
  2. B4;
  3. C5;
  4. D6;
  5. E7.
Revelar gabarito e comentário

GabaritoA — 3;

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

Consulta SQL com múltiplas junções e DISTINCT

Gabarito: letra A (3 linhas). O comando cruza quatro cópias da tabela FILIACAO e, após aplicar as condições de junção e o DISTINCT, produz apenas 3 pares distintos de pessoas. A chave está em entender que a consulta busca pares de pessoas (t3.Pessoa e t4.Pessoa) que são filhos de duas pessoas (t1.Pessoa e t2.Pessoa) que, por sua vez, compartilham o mesmo genitor (t1.Genitor = t2.Genitor) — ou seja, t1 e t2 são irmãos, e t3 e t4 são os filhos de cada um deles.

Para resolver, precisamos interpretar o que a consulta realmente faz. Temos quatro aliases da mesma tabela: t1, t2, t3 e t4. As condições são:

  • t1.Pessoa < t2.Pessoa: garante que t1 e t2 são pessoas distintas (ordenação alfabética).

  • t1.Genitor = t2.Genitor: t1 e t2 têm o mesmo genitor, ou seja, são irmãos.

  • t3.Genitor = t1.Pessoa: t3 é filho de t1.

  • t4.Genitor = t2.Pessoa: t4 é filho de t2.

O SELECT retorna t3.Pessoa, t4.Pessoa com DISTINCT, ou seja, os pares de primos (filhos de irmãos). Vamos identificar os irmãos na tabela:

Pessoa

Genitor

Alexandre

Francisco

Francisco

João

Joaquina

João

Carlota

Joaquina

João

Manuel

Paulo

Manuel

Maria

Paulo

Analisando os genitores:

  • Francisco e Joaquina têm o mesmo genitor: João. Então t1 = Francisco, t2 = Joaquina (ou vice-versa, mas a condição t1.Pessoa < t2.Pessoa fixa a ordem: Francisco < Joaquina).

  • João e Paulo têm o mesmo genitor: Manuel. Então t1 = João, t2 = Paulo.

Agora, para cada par de irmãos, encontramos os filhos:

  • Filhos de Francisco: Alexandre.

  • Filhos de Joaquina: Carlota.

  • Filhos de João: Francisco e Joaquina.

  • Filhos de Paulo: Maria.

Para o par (Francisco, Joaquina): t3 = Alexandre, t4 = Carlota → par (Alexandre, Carlota).

Para o par (João, Paulo): t3 pode ser Francisco ou Joaquina, t4 = Maria. Isso gera dois pares: (Francisco, Maria) e (Joaquina, Maria).

Total: 3 pares distintos. Nenhum outro par de irmãos existe (Alexandre, Carlota, João, Paulo, Maria não têm irmãos na tabela). Portanto, a resposta é 3.

Alternativa A — ✅ Correta ⟵ GABARITO

Como demonstrado, a consulta retorna exatamente 3 linhas: (Alexandre, Carlota), (Francisco, Maria) e (Joaquina, Maria). O DISTINCT elimina qualquer duplicata, e não há outras combinações possíveis.

Alternativa B — ❌ Incorreta

O número 4 não corresponde a nenhuma contagem real. Se o candidato contar os pares de irmãos (2) e multiplicar por 2, chegaria a 4, mas isso ignora que o par (Francisco, Joaquina) só gera um par de filhos, não dois.

Alternativa C — ❌ Incorreta

O número 5 poderia surgir se o candidato contasse todos os pares possíveis de primos sem considerar que alguns não existem (ex.: Alexandre com Francisco, etc.). Mas a consulta é restrita pelas condições de junção.

Alternativa D — ❌ Incorreta

O número 6 poderia vir de um produto cartesiano mal calculado, mas as condições de junção reduzem drasticamente o resultado.

Alternativa E — ❌ Incorreta

O número 7 é o total de linhas da tabela, mas a consulta não retorna todas as linhas; ela retorna pares de primos.

NÃO CAIA NESSA!

A banca tenta fazer o candidato contar os pares de irmãos e multiplicar pelo número de filhos, mas esquece que o DISTINCT e as condições específicas reduzem o resultado. O erro comum é considerar que cada irmão tem um filho, quando na verdade um dos irmãos (João) tem dois filhos, gerando dois pares.

PEGA ESSA DICA!

Para resolver consultas com múltiplas junções, identifique primeiro os pares que satisfazem as condições iniciais (t1 e t2) e depois verifique os filhos (t3 e t4). Monte uma tabela com os resultados intermediários para evitar erros de contagem.

Gabarito: letra A

Link permanente: /questoes/fg161103