Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Quadrix 2024

Banco de DadosSQL
Código
qg347348
Banca
Quadrix
Órgão
CFP
Ano
2024
Nível
Superior
Cargo
Analista Técnico/TI/Desenvolvimento

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’;
  1. CCerto
  2. 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: PSICOLOGOINSCRICAOCURSO e INSCRICAOCERTIFICADO. 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.

  1. 1psicologo
  2. 2inscricao
  3. 3curso
  4. 4certificado
  5. 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.

Gabarito: ERRADO (letra E).

Link permanente: /questoes/qg347348