FC ConcursosFC Concursos

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 é:

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

  2. 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;

  3. 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 );

  4. 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 );

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

Continue aprendendo