Analista do - Perito em Tecnologia da Informação e Comunicação
Observe a inserção dos registros pelo seguinte script SQL.INSERT INTO Parte (ParteID, idade)VALUES (1 ,17);INSERT INTO Parte (ParteID, idade)VALUES (2 ,16);INSERT INTO Processo (processoID, data_audiencia,valor_causa)VALUES (1 ,'2025-02-05',1000);INSERT INTO Processo (processoID, data_audiencia,valor_causa)VALUES (2 ,'2025-10-05',2000);INSERT INTO ProcessoParte (processoID, parteid)VALUES (1 ,1);INSERT INTO ProcessoParte (processoID, parteid)VALUES (2 ,2);No PostgreSQL, para consultar os Processos (Processos) que envolvem partes menores que 18 anos, por ordem de maior Valor de Causa (valor_causa), cuja Audiência (data_audiencia) está agendada para os próximos 30 dias, deve-se executar o comando SQL:
ASELECT p.processoid, p.valor_causa, p.data_audienciaFROM Parte pt, ProcessoParte pp , Processo pWHERE pp.parteid = pt.parteid andpp.processoid = p.processoidAND pt.idade < 18AND p.data_audiencia BETWEEN NOW()::DATE ANDNOW()::DATE + INTERVAL '30 days'ORDER BY p.valor_causa DESC
BSELECT p.processoid as numero, SUM(p.valor_causa) asValorCausa, p.data_audienciaFROM processo pINNER JOIN parte pt ON pt.idade < 18INNER JOIN ProcessoParte pp ON pp.parteid = pt.parteidWHERE p.data_audiencia BETWEEN NOW() AND NOW() +INTERVAL '30 days'GROUP BY p.processoid, p.data_audienciaORDER BY ValorCausa DESC
CSELECT p.processoid as numero, SUM(p.valor_causa) asValorCausa, p.data_audiencia as DataAudienciaFROM Processo pINNER JOIN ProcessoParte pp ON p.ProcessoID =pp.ProcessoIDINNER JOIN Parte pt ON pp.ParteID = pt.ParteIDWHERE pt.idade < 18AND p.data_audiencia > NOW() + INTERVAL '30 days'GROUP BY p.processoid, p.data_audienciaORDER BY ValorCausa ASC
DSELECT p.processoid as numero, p.valor_causa,p.data_audienciaFROM Parte ptINNER JOIN Processo p ON pt.idade < 18AND p.data_audiencia BETWEEN NOW() AND CURRENT_DATE +DATE_PART('DAY', 30)
ESELECT p.processoid, p.valor_causa, p.data_audienciaFROM processo pINNER JOIN parte pt ON pt.idade < 18WHERE p.data_audiencia BETWEEN NOW() AND NOW() + 30
Revelar gabarito e comentário▾
GabaritoA — SELECT p.processoid, p.valor_causa, p.data_audiencia
FROM Parte pt, ProcessoParte pp , Processo p
WHERE pp.parteid = pt.parteid and
pp.processoid = p.processoid
AND pt.idade < 18
AND p.data_audiencia BETWEEN NOW()::DATE AND
NOW()::DATE + INTERVAL '30 days'
ORDER BY p.valor_causa DESC
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: Consulta com múltiplas tabelas e filtros temporais
Gabarito: letra A. A alternativa A utiliza corretamente produto cartesiano com condições de junção no WHERE, filtra partes menores de 18 anos, aplica BETWEEN com NOW()::DATE e INTERVAL '30 days' para os próximos 30 dias, e ordena por valor_causa decrescente conforme solicitado. As demais alternativas apresentam erros de sintaxe, lógica ou uso inadequado de agregação.
A questão exige combinar as tabelas Parte, ProcessoParte e Processo para obter processos cujas partes têm idade < 18, com data_audiencia nos próximos 30 dias, ordenados pelo maior valor_causa. A alternativa A atende todos esses requisitos.
Alternativa A — ✅ Correta ⟵ GABARITO
Utiliza a sintaxe clássica de produto cartesiano (FROM com vírgulas) e condições de junção no WHERE: pp.parteid = pt.parteid AND pp.processoid = p.processoid. Filtra pt.idade < 18 e p.data_audiencia BETWEEN NOW()::DATE AND NOW()::DATE + INTERVAL '30 days'. A ordenação ORDER BY p.valor_causa DESC atende ao pedido de maior valor. A conversão para DATE evita problemas com horário.
Alternativa B — ❌ Incorreta
Apresenta INNER JOIN parte pt ON pt.idade < 18, que é uma condição de filtro, não uma junção — falta igualdade entre chaves, gerando um produto cartesiano indesejado. Além disso, usa SUM(p.valor_causa) e GROUP BY, o que é desnecessário e pode distorcer o resultado (cada processo tem um único valor_causa). A ordenação por ValorCausa DESC está correta, mas os erros anteriores invalidam a consulta.
Alternativa C — ❌ Incorreta
O filtro temporal p.data_audiencia > NOW() + INTERVAL '30 days' está errado: o enunciado pede "próximos 30 dias", ou seja, datas entre hoje e hoje + 30 dias, inclusive. A condição > captura apenas datas após 30 dias, excluindo o período correto. Além disso, usa SUM e GROUP BY desnecessários, e ORDER BY ValorCausa ASC ordena do menor para o maior, contrário ao solicitado.
Alternativa D — ❌ Incorreta
A junção INNER JOIN Processo p ON pt.idade < 18 é inválida: a cláusula ON deve conter condições de igualdade entre colunas das tabelas, não um filtro. Além disso, DATE_PART('DAY', 30) é sintaxe incorreta — DATE_PART extrai partes de uma data/hora, não cria intervalos. O correto seria INTERVAL '30 days'. Também falta a junção com ProcessoParte, não vinculando partes a processos.
Alternativa E — ❌ Incorreta
Mesmo erro das anteriores: INNER JOIN parte pt ON pt.idade < 18 sem condição de junção adequada. Além disso, NOW() + 30 é inválido; é necessário INTERVAL '30 days'. A consulta também não faz junção com ProcessoParte, não relacionando partes e processos.
NÃO CAIA NESSA!
A banca testa o conhecimento de sintaxe de junção e uso correto de intervalos. O erro mais comum é usar uma condição de filtro (como pt.idade < 18) como condição de junção, o que gera um produto cartesiano sem ligação entre as tabelas. Outro erro frequente é utilizar SUM e GROUP BY sem necessidade, pensando que é preciso agregar valores. Fique atento à semântica: cada processo tem um único valor_causa, portanto não há o que somar.