Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2025
Banco de Dados›Consultas e Comandos em SQL
Código
qa699088
Banca
FUNDATEC
Órgão
GHC
Ano
2025
Cargo
Prog ( )
Para responder à questão, considere o modelo Entidade-Relacionamento (ER) apresentado pela Figura 1 abaixo, bem como o dicionário de dados apresentado logo em seguida:
Figura 1 – Modelo Entidade-Relacionamento (ER)
Dicionário de dados
Analise a seguinte expressão SQL e assinale a alternativa correta.
select relacao_funcionarios.funcionario, relacao_funcionarios.cargo, case when relacao_funcionarios.area_cargo = 1 then 'Saúde' else 'Outros' end area from (select fun_nome funcionario, car_nome cargo, case when C.car_nome = 'Enfermeiro' then 1 else 0 when C.car_nome = 'Medico' then 1 else 0 when C.car_nome = 'Programador' then 2 else 0 end area_cargo from funcionario F, cargo C where F.car_id = C.car_id) relacao_funcionarios
AA expressão SQL está correta e cria um campo em tempo de execução chamado area_cargo.
BA expressão SQL está correta e cria uma tabela em tempo de execução chamada relacao_funcionarios.
CA expressão SQL está incorreta, porque apresenta os funcionários repetidos para cada area_cargo.
DA expressão SQL está incorreta, porque a subconsulta pode retornar NULL.
EA expressão SQL está incorreta, porque há erro de sintaxe.
Revelar gabarito e comentário▾
GabaritoE — A expressão SQL está incorreta, porque há erro de sintaxe.
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: Erro de Sintaxe na Expressão CASE
Gabarito: letra E. A expressão SQL está incorreta porque há erro de sintaxe na construção da cláusula CASE dentro da subconsulta: a sintaxe correta exige que cada condição WHEN seja seguida de seu respectivo THEN, e não que múltiplos WHEN sejam encadeados sem a devida separação. No comando apresentado, a estrutura when C.car_nome = 'Enfermeiro' then 1 else 0 when C.car_nome = 'Medico' then 1 else 0 é inválida, pois após o ELSE 0 do primeiro WHEN, não pode haver outro WHEN sem um novo CASE ou a devida estruturação.
A cláusula CASE no SQL é uma expressão condicional que permite retornar valores diferentes com base em condições. Sua sintaxe básica é:
CASE
WHEN condicao1 THEN resultado1
WHEN condicao2 THEN resultado2
...
ELSE resultado_default
END
Cada WHEN deve ser seguido de seu THEN, e a sequência de WHEN...THEN pode ser repetida quantas vezes necessário, mas sempre dentro da mesma estrutura CASE...END. O ELSE é opcional e, se presente, deve vir após todos os WHEN...THEN. No comando da questão, a subconsulta tenta usar múltiplos WHEN com ELSE intercalado, o que viola a sintaxe. O correto seria:
CASE
WHEN C.car_nome = 'Enfermeiro' THEN 1
WHEN C.car_nome = 'Medico' THEN 1
WHEN C.car_nome = 'Programador' THEN 2
ELSE 0
END
Além disso, a expressão case when relacao_funcionarios.area_cargo = 1 then 'Saúde' else 'Outros' end na consulta externa está correta, mas depende da subconsulta que contém o erro. Portanto, a falha está na subconsulta, tornando a expressão SQL inteira incorreta.
A alternativa A afirma que a expressão está correta e cria um campo em tempo de execução chamado area_cargo. De fato, a consulta tenta criar um campo calculado area_cargo na subconsulta e outro area na consulta externa, mas devido ao erro de sintaxe, a expressão não é válida. A alternativa B também afirma que a expressão está correta e cria uma tabela em tempo de execução chamada relacao_funcionarios. Na verdade, relacao_funcionarios é um alias para a subconsulta, não uma tabela criada em tempo de execução; além disso, o erro de sintaxe impede a execução. A alternativa C sugere que a expressão está incorreta porque apresenta os funcionários repetidos para cada area_cargo, mas isso não é o problema principal — o erro é de sintaxe. A alternativa D menciona que a subconsulta pode retornar NULL, o que é possível, mas não é o motivo da incorreção da expressão.
Portanto, a única alternativa que identifica corretamente o problema é a letra E, que aponta o erro de sintaxe.
1CASE
2WHEN condição THEN resultado
3WHEN condição THEN resultado
4ELSE resultado (opcional)
5END
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
A expressão SQL não está correta devido ao erro de sintaxe na cláusula CASE da subconsulta. Embora a intenção seja criar um campo calculado area_cargo em tempo de execução, a sintaxe inválida impede a execução. O campo area_cargo seria criado se a sintaxe estivesse correta, mas não é o caso.
Alternativa B — ❌ Incorreta
A expressão SQL não está correta e relacao_funcionarios não é uma tabela criada em tempo de execução, mas sim um alias para a subconsulta. Além disso, o erro de sintaxe na subconsulta torna a expressão inválida.
Alternativa C — ❌ Incorreta
A expressão SQL está incorreta, mas não porque apresenta os funcionários repetidos para cada area_cargo. O problema é o erro de sintaxe na cláusula CASE. A repetição de funcionários poderia ocorrer se houvesse um JOIN inadequado, mas não é o caso aqui.
Alternativa D — ❌ Incorreta
A subconsulta pode retornar NULL, mas isso não é o motivo da incorreção da expressão. O erro principal é de sintaxe na cláusula CASE. A possibilidade de NULL é uma característica comum em consultas SQL e não invalida a expressão por si só.
Alternativa E — ✅ Correta ⟵ GABARITO
A expressão SQL está incorreta porque há erro de sintaxe na cláusula CASE da subconsulta. A estrutura when C.car_nome = 'Enfermeiro' then 1 else 0 when C.car_nome = 'Medico' then 1 else 0 é inválida, pois após o ELSE 0 do primeiro WHEN, não pode haver outro WHEN sem a devida separação. A sintaxe correta exige que todos os WHEN...THEN sejam listados antes do ELSE, como mostrado no desenvolvimento.
NÃO CAIA NESSA!
A banca explora a confusão entre a sintaxe correta do CASE e uma estrutura incorreta com múltiplos WHEN intercalados por ELSE. O candidato pode não perceber que o ELSE deve vir apenas uma vez, após todos os WHEN...THEN. Lembre-se: a ordem correta é WHEN...THEN (repetido), ELSE (opcional), END.
PEGA ESSA DICA!
Ao revisar expressões CASE em SQL, verifique sempre se cada WHEN tem seu THEN correspondente e se o ELSE aparece apenas uma vez, no final. Uma boa prática é reescrever a expressão em um formato padronizado para identificar erros de sintaxe rapidamente.