Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2022
- Código
- ce147341
- Banca
- CESPE / CEBRASPE
- Órgão
- TCE-RJ
- Ano
- 2022
- Nível
- Superior
- Cargo
- Analista de Controle Externo
- CCerto
- EErrado
GabaritoC — Certo
Esta questão depende de um texto-base não disponível, mas a análise do comando SQL pode ser feita com base na lógica geral. O gabarito oficial é Certo.
Gabarito: ✅ CERTO. O comando CREATE VIEW coordenador_curso AS SELECT * FROM professor p LEFT OUTER JOIN curso s ON true WHERE p.cpf_professor = s.cpf_professor_coord cria uma visão que contém os dados dos professores que são coordenadores de pelo menos um curso, juntamente com os dados dos respectivos cursos. Embora pareça um LEFT JOIN, a cláusula ON true seguida do WHERE transforma a operação em um INNER JOIN – ou seja, apenas as combinações que satisfazem a condição de igualdade são retornadas, excluindo cursos sem coordenador (pois não haveria correspondência) e também excluindo professores que não coordenam nenhum curso. O enunciado afirma que a visão deve conter “todos os dados dos professores e dos respectivos cursos que eles coordenam, não incluindo os cursos sem um professor com a função de coordenador”. A interpretação adotada pela banca é que apenas professores que efetivamente coordenam cursos devem aparecer, e o comando atende exatamente a isso. Portanto, a afirmação está Certa.
❌ ERRADO – Se o comando fosse interpretado literalmente como LEFT JOIN, esperaríamos que todos os professores fossem preservados (inclusive os sem coordenação), com valores NULL para as colunas de curso. No entanto, a presença do WHERE anula esse efeito, transformando a junção em interna. A sintaxe é incomum, mas funcional: LEFT OUTER JOIN ... ON true gera o produto cartesiano entre as tabelas, e o WHERE filtra as linhas onde há correspondência. Dessa forma, o resultado é idêntico a um INNER JOIN com a condição ON p.cpf_professor = s.cpf_professor_coord. Assim, professores sem coordenação são excluídos, o que está alinhado com a redação do enunciado.
Em SQL, o LEFT JOIN com ON true seguido de WHERE condição equivale a um INNER JOIN. Na hora da prova, desconfie de junções que parecem externas mas contêm filtros no WHERE – eles podem converter o resultado em interno. O comando correto para incluir todos os professores (mesmo sem coordenação) seria LEFT JOIN curso s ON p.cpf_professor = s.cpf_professor_coord, sem o WHERE adicional.
✅ CERTO
Link permanente: /questoes/ce147341