Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2025

Banco de DadosConsultas 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

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

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

Gabarito: Certo

Link permanente: /questoes/ce417278