Um banco de dados relacional foi criado para registrar os cursos realizados por psicólogos em uma clínica
de treinamento. O banco de dados não possui colunas com autoincremento e contém as seguintes tabelas: PSICOLOGO (id_psicologo (PK, INT), nome (VARCHAR), email (VARCHAR)); CURSO (id_curso (PK, INT),
nome_curso (VARCHAR), duracao (INT)); INSCRICAO (id_inscricao (PK, INT), id_psicologo (FK, INT),
id_curso
(FK, INT), data_inscricao (DATE)); CERTIFICADO (id_certificado (PK, INT),
id_inscricao (FK, INT), data_certificado (DATE)).
Com base nessa situação hipotética e na linguagem SQL, julgue o item seguinte.
Para se selecionarem os nomes dos psicólogos e os nomes dos cursos que eles concluíram, cuja data do certificado seja superior a ‘2023‑01‑01’, deve‑se executar a instrução SQL a seguir.SELECT nome_curso, nomeFROM curso cJOIN inscricao i ON c.id_curso = i.id_cursoJOIN psicologo p ON i.id_psicologo = p.id_psicologoWHERE data_certificado > ‘2023‑01‑01’;
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoE — Errado
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: JOIN e filtro de colunas — análise da consulta
Gabarito: ERRADO (letra E). A instrução SQL apresentada está incorreta porque a coluna data_certificado pertence à tabela CERTIFICADO, que não é referenciada na consulta — o FROM usa apenas curso c, inscricao i e psicologo p, sem qualquer JOIN com a tabela CERTIFICADO. Além disso, a consulta seleciona nome_curso e nome, mas o enunciado pede os nomes dos psicólogos e dos cursos, o que está correto, porém a ausência da tabela CERTIFICADO torna o filtro WHERE data_certificado > '2023-01-01' inválido, pois essa coluna não existe no conjunto de tabelas consultadas.
Para entender o erro, é preciso dominar a estrutura do banco de dados descrito. Temos quatro tabelas: PSICOLOGO (com id_psicologo, nome, email), CURSO (com id_curso, nome_curso, duracao), INSCRICAO (com id_inscricao, id_psicologo, id_curso, data_inscricao) e CERTIFICADO (com id_certificado, id_inscricao, data_certificado). A relação entre elas é: um psicólogo se inscreve em um curso (tabela INSCRICAO), e uma inscrição pode gerar um certificado (tabela CERTIFICADO). Para saber quais cursos um psicólogo concluiu (ou seja, possui certificado), é necessário unir as quatro tabelas: PSICOLOGO → INSCRICAO → CURSO e INSCRICAO → CERTIFICADO. A consulta correta precisaria incluir a tabela CERTIFICADO no FROM e fazer o JOIN apropriado, por exemplo: FROM curso c JOIN inscricao i ON c.id_curso = i.id_curso JOIN psicologo p ON i.id_psicologo = p.id_psicologo JOIN certificado ce ON i.id_inscricao = ce.id_inscricao WHERE ce.data_certificado > '2023-01-01'.
A consulta dada faz apenas três junções: curso com inscricao e inscricao com psicologo. Isso retorna os nomes dos psicólogos e os nomes dos cursos em que estão inscritos, mas sem qualquer informação sobre certificados. O filtro WHERE data_certificado > '2023-01-01' tenta usar uma coluna que não está disponível nas tabelas consultadas, o que geraria um erro de sintaxe ou de coluna inexistente na maioria dos SGBDs. Mesmo que o banco aceitasse a consulta (o que não é o caso), ela não filtraria corretamente, pois não há como saber se o curso foi concluído.
Outro ponto: a ordem das colunas no SELECT (nome_curso, nome) não é um erro, pois o enunciado pede "nomes dos psicólogos e nomes dos cursos", e a ordem não afeta o resultado. O erro central é a falta da tabela CERTIFICADO. A banca explora exatamente essa pegadinha: o candidato pode achar que a consulta está correta porque faz os JOINs entre as três tabelas principais, mas esquece que a informação de certificado está em uma quarta tabela que precisa ser incluída.
1psicologo
2inscricao
3curso
4certificado
5WHERE data_certificado
LEVEL · soulevel.com.br
Item — ❌ ERRADO
A instrução SQL está incorreta porque não inclui a tabela CERTIFICADO na consulta. A coluna data_certificado pertence a essa tabela, e sem o JOIN com ela, o WHERE não pode filtrar por essa coluna. A consulta correta exigiria algo como:
SELECT p.nome, c.nome_curso
FROM curso c
JOIN inscricao i ON c.id_curso = i.id_curso
JOIN psicologo p ON i.id_psicologo = p.id_psicologo
JOIN certificado ce ON i.id_inscricao = ce.id_inscricao
WHERE ce.data_certificado > '2023-01-01';
A banca troca a tabela que contém a coluna do filtro: em vez de incluir CERTIFICADO, ela usa apenas as três tabelas, fazendo o candidato acreditar que a consulta está completa. Além disso, a ordem das colunas no SELECT não é o problema; o problema é a ausência da tabela que contém a data do certificado.
NÃO CAIA NESSA!
A banca omite a tabela CERTIFICADO na consulta, mas usa a coluna data_certificado no WHERE. O candidato desatento pode não perceber que essa coluna não existe nas tabelas consultadas, achando que a consulta está correta. Lembre-se: para filtrar por uma coluna, a tabela que a contém deve estar presente no FROM ou em um JOIN.