Questão FC890519
Observe o script SQL do PostgreSQL a seguir. CREATE TABLE partes ( id INT PRIMARY KEY, nome VARCHAR(100)); CREATE TABLE processos ( id INT PRIMARY KEY, numero_processo VARCHAR(50))
Linguagem SQL
FGV · 2026
Observe o script SQL do PostgreSQL a seguir.
CREATE TABLE partes (
id INT PRIMARY KEY,
nome VARCHAR(100));
CREATE TABLE processos (
id INT PRIMARY KEY,
numero_processo VARCHAR(50));
CREATE TABLE audiencias (
id INT PRIMARY KEY,
processo_id INT,
FOREIGN KEY (processo_id) REFERENCES processos(id));
CREATE TABLE partes_processos (
processo_id INT,
parte_id INT,
PRIMARY KEY (processo_id, parte_id),
FOREIGN KEY (processo_id) REFERENCES processos(id),
FOREIGN KEY (parte_id) REFERENCES partes(id));
-- Partes
INSERT INTO partes (id, nome)
VALUES (1, 'João Silva'), (2, 'Maria Souza');
-- Processos
INSERT INTO processos (id, numero_processo)
VALUES (101, '0001234-56.2025.8.01.0001'),
(102, '0001234-56.2025.8.01.0002');
-- Audiências
INSERT INTO audiencias (id, processo_id)
VALUES (201, 101);
-- Partes_Processos
INSERT INTO partes_processos (processo_id, parte_id)
VALUES (101, 1), (102, 2);
A consulta que retorna apenas os registros com Partes que ainda não possuem Audiências marcadas é:
- SELECT p.nome
FROM audiencias a
RIGHT JOIN partes_processos pp
ON a.processo_id = pp.processo_id
JOIN partes p ON pp.parte_id = p.id;
- SELECT p.nome
FROM partes p
JOIN partes_processos pp ON p.id = pp.parte_id
LEFT JOIN audiencias a
ON pp.processo_id = a.processo_id
WHERE a.id IS NOT NULL;
- SELECT p.nome
FROM partes p
WHERE NOT EXISTS (
SELECT 1
FROM partes_processos pp
JOIN audiencias a ON pp.processo_id = a.processo_id
WHERE pp.parte_id = p.id );
- SELECT p.nome
FROM partes p
WHERE EXISTS (
SELECT 1
FROM partes_processos pp
JOIN audiencias a
ON pp.processo_id = a.processo_id
WHERE pp.parte_id = p.id );
- SELECT p.nome
FROM partes p
JOIN partes_processos pp ON pp.parte_id = p.id
WHERE EXISTS (
SELECT 1
FROM audiencias a
WHERE a.processo_id = pp.processo_id );
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
A consulta utiliza NOT EXISTS para filtrar as partes que não possuem vínculo com nenhuma audiência. Para cada linha de partes p, o banco executa a subconsulta correlacionada para verificar existência de registro associado.
A subconsulta SELECT 1 FROM partes_processos pp JOIN audiencias a ON pp.processo_id = a.processo_id WHERE pp.parte_id = p.id busca qualquer processo da parte que tenha audiência marcada. Se nenhum registro for encontrado, NOT EXISTS retorna verdadeiro e o nome da parte é incluído no resultado.
SELECT 1 é usado por convenção pois apenas sinaliza existência, economizando recursos. A correlação via pp.parte_id = p.id garante que a verificação seja feita para cada parte individualmente.
Conteúdo do catálogo FC Concursos · Atualizado em