Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2025
Banco de Dados›Consultas e Comandos em SQL
Código
ce417278
Banca
CESPE / CEBRASPE
Órgão
MPE CE
Ano
2025
Cargo
Ana Min ( )
A seguir, são apresentadas as tabelas Pessoas, Processos e Partes que existem em um banco de dados: a primeira armazena dados acerca das pessoas envolvidas nos processos; a segunda armazena dados dos processos; e a terceira relaciona pessoas aos processos, com indicação do papel de cada uma (autor, réu, testemunha, etc.). Por fim, uma mesma pessoa pode estar envolvida em mais de um processo, e assumir diferentes papéis em cada um deles.
Pessoas
id_pessoa
nome
101
João da Silva
102
Maria Souza
103
Carlos Pereira
104
Ana Lima
Processos
id_processo
numero_processo
1
20250012345
2
20250067890
3
20250111112
4
20250155555
Partes
id_parte
id_processo
id_pessoa
tipo_parte
1
1
101
autor
2
1
102
réu
3
2
103
testemunha
4
4
104
réu
5
2
101
réu
A partir das informações apresentadas, julgue o item que se segue.
A execução da consulta SQL a seguir listará todos os processos, inclusive aqueles que ainda não têm partes associadas, e exibirá o nome das pessoas e os seus respectivos papéis nos processos em que estão envolvidas.
SELECT p.numero_processo, ps.nome, pa.tipo_parte FROM Processos p LEFT JOIN Partes pa ON p.id_processo = pa.id_processo LEFT JOIN Pessoas ps ON pa.id_pessoa = ps.id_pessoa
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoC — Certo
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 – Junções (JOIN) e a cláusula LEFT JOIN
Gabarito: Certo. A consulta utiliza LEFT JOIN entre Processos e Partes, o que garante que todos os registros da tabela à esquerda (Processos) sejam retornados, mesmo aqueles sem correspondência em Partes. Para esses processos sem partes associadas, os campos de Partes e Pessoas virão como NULL, mas o processo será listado. A segunda junção (LEFT JOIN Pessoas) apenas complementa os dados quando há uma parte associada, sem eliminar nenhum processo.
A questão testa o entendimento do comportamento das junções externas (OUTER JOIN) em SQL, especificamente o LEFT JOIN. Diferentemente do INNER JOIN, que retorna apenas as linhas com correspondência nas duas tabelas, o LEFT JOIN preserva todas as linhas da tabela à esquerda, preenchendo com NULL os atributos da tabela à direita quando não há correspondência. É exatamente essa característica que garante que processos sem partes associadas apareçam no resultado.
Vamos analisar a consulta em detalhes:
SELECT p.numero_processo, ps.nome, pa.tipo_parte
FROM Processos p
LEFT JOIN Partes pa ON p.id_processo = pa.id_processo
LEFT JOIN Pessoas ps ON pa.id_pessoa = ps.id_pessoa
Primeira junção (Processos LEFT JOIN Partes): Todos os processos da tabela Processos são mantidos. Para cada processo, busca-se uma linha correspondente em Partes pela condição p.id_processo = pa.id_processo. Se não houver correspondência (processo sem partes), os campos de Partes (id_parte, id_pessoa, tipo_parte) serão NULL na linha resultante.
Segunda junção (Partes LEFT JOIN Pessoas): Esta junção é feita sobre o resultado da primeira. Para cada linha do resultado anterior, busca-se uma pessoa correspondente em Pessoas pela condição pa.id_pessoa = ps.id_pessoa. Se pa.id_pessoa for NULL (caso do processo sem partes), a condição não é satisfeita e os campos de Pessoas (nome) também serão NULL. Se houver uma parte associada, o nome da pessoa é preenchido.
Resultado esperado com os dados fornecidos:
numero_processo
nome
tipo_parte
20250012345
João da Silva
autor
20250012345
Maria Souza
réu
20250067890
Carlos Pereira
testemunha
20250067890
João da Silva
réu
20250111112
NULL
NULL
20250155555
Ana Lima
réu
Observe que o processo 20250111112 (id_processo = 3) não possui nenhuma parte associada na tabela Partes. Mesmo assim, ele aparece no resultado, com nome e tipo_parte como NULL. Isso confirma que a consulta lista todos os processos, inclusive os sem partes.
A pegadinha da questão está em confundir o LEFT JOIN com o INNER JOIN. Se a consulta usasse INNER JOIN, o processo sem partes seria omitido, pois não haveria correspondência na tabela Partes. O LEFT JOIN é a ferramenta correta para garantir que todos os registros da tabela principal sejam exibidos, mesmo sem correspondência nas tabelas secundárias.
NÃO CAIA NESSA!
A banca explora a confusão entre LEFT JOIN e INNER JOIN. O candidato que não domina a diferença pode achar que a consulta omitiria o processo sem partes, marcando a alternativa "Errado". Lembre-se: o LEFT JOIN preserva todas as linhas da tabela à esquerda, preenchendo com NULL quando não há correspondência. O INNER JOIN descartaria essas linhas.
Item — ✅ CERTO
A afirmação está correta. A consulta usa LEFT JOIN em ambas as junções, garantindo que todos os processos sejam listados, inclusive aqueles sem partes associadas. Para esses processos, os campos nome e tipo_parte serão NULL, mas o processo aparecerá no resultado. A consulta também exibe o nome das pessoas e seus papéis nos processos em que estão envolvidas, conforme a tabela Partes.