Analista Judiciário - Tecnologia de Informação – Análise de Sistemas
Tabela 1
Considere a estrutura e uma instância da tabela relacional
FILIACAO exibida a seguir.
Com relação à tabela FILIACAO (Tabela 1), definida anteriormente, o comando SQL que produz a lista dos nomes das pessoas que são citadas na instância da referida tabela, sem repetições, é:
Aselect Pessoa FROM FILIACAOUNION ALL select Genitor FROM FILIACAO
Bselect Pessoa FROM FILIACAOUNION select Genitor FROM FILIACAO
Cselect distinct Pessoa, Genitor FROM FILIACAO
Dselect distinct Pessoa UNION distinct Genitor FROM FILIACAO
Eselect Pessoa FROM FILIACAO andselect Genitor FROM FILIACAO
Revelar gabarito e comentário▾
GabaritoB — select Pessoa FROM FILIACAO
UNION select Genitor FROM FILIACAO
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: UNION e eliminação de duplicatas
Gabarito: letra B. O comando UNION (sem o ALL) combina os resultados de duas consultas e elimina automaticamente as linhas duplicadas, produzindo exatamente a lista de nomes citados na tabela FILIACAO — tanto na coluna Pessoa quanto na coluna Genitor — sem repetições. A alternativa B é a única que usa UNION puro, que é o operador correto para essa tarefa.
O problema pede a lista de todas as pessoas citadas na tabela, ou seja, tanto quem aparece como Pessoa quanto quem aparece como Genitor. A tabela FILIACAO tem duas colunas: Pessoa (o filho) e Genitor (o pai/mãe). Para obter todos os nomes, precisamos unir os valores das duas colunas. A questão é que uma mesma pessoa pode aparecer nas duas colunas (por exemplo, Francisco é Genitor de Alexandre e também Pessoa de João), e também pode aparecer várias vezes na mesma coluna (por exemplo, João aparece como Genitor de Francisco e de Joaquina). O comando deve eliminar todas essas repetições.
O operador UNION faz exatamente isso: ele combina os resultados de duas consultas e remove as linhas duplicadas. Já o UNION ALL combina os resultados sem eliminar duplicatas, o que não atende ao requisito de "sem repetições". A alternativa A usa UNION ALL, então está incorreta. A alternativa B usa UNION, que é o correto.
Vamos analisar as outras alternativas:
C)select distinct Pessoa, Genitor FROM FILIACAO — Este comando retorna pares distintos de (Pessoa, Genitor), não uma lista de nomes individuais. Ele não separa os valores das duas colunas, então não produz a lista de pessoas citadas.
D)select distinct Pessoa UNION distinct Genitor FROM FILIACAO — Este comando tem um erro de sintaxe: a cláusula DISTINCT não pode ser usada diretamente após UNION. A sintaxe correta seria SELECT DISTINCT Pessoa FROM FILIACAO UNION SELECT DISTINCT Genitor FROM FILIACAO. Além disso, o UNION já elimina duplicatas, então o DISTINCT em cada SELECT é redundante, mas não é o erro principal — o erro é a sintaxe inválida.
E)select Pessoa FROM FILIACAO and select Genitor FROM FILIACAO — Este comando usa and para conectar dois SELECT, o que não é válido em SQL. O correto seria usar UNION ou UNION ALL.
A pegadinha da questão está em distinguir UNION de UNION ALL. O UNION elimina duplicatas, enquanto o UNION ALL não. Como o enunciado pede "sem repetições", o UNION é o operador correto. A alternativa A tenta confundir o candidato usando UNION ALL, que é um erro comum.
1UNION
2Elimina duplicatas
3UNION ALL
4Mantém duplicatas
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Usa UNION ALL, que não elimina duplicatas. O UNION ALL simplesmente concatena os resultados das duas consultas, mantendo todas as linhas, inclusive as repetidas. Como o enunciado pede "sem repetições", essa alternativa não atende ao requisito.
Alternativa B — ✅ Correta ⟵ GABARITO
Usa UNION, que combina os resultados das duas consultas e elimina automaticamente as linhas duplicadas. Isso produz exatamente a lista de nomes citados na tabela, sem repetições, conforme pedido.
Alternativa C — ❌ Incorreta
select distinct Pessoa, Genitor FROM FILIACAO retorna pares distintos de (Pessoa, Genitor), não uma lista de nomes individuais. O DISTINCT aqui se aplica ao par de colunas, não a cada coluna separadamente. Portanto, não produz a lista de pessoas citadas.
Alternativa D — ❌ Incorreta
Apresenta erro de sintaxe: select distinct Pessoa UNION distinct Genitor FROM FILIACAO. A cláusula DISTINCT não pode ser usada diretamente após UNION. A sintaxe correta seria SELECT DISTINCT Pessoa FROM FILIACAO UNION SELECT DISTINCT Genitor FROM FILIACAO. Além disso, o UNION já elimina duplicatas, tornando o DISTINCT redundante, mas o erro principal é a sintaxe inválida.
Alternativa E — ❌ Incorreta
Usa and para conectar dois SELECT, o que não é válido em SQL. O correto seria usar UNION ou UNION ALL. A palavra-chave and é usada em cláusulas WHERE, não para combinar consultas.