Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2023
- Código
- ce397763
- Banca
- CESPE / CEBRASPE
- Órgão
- TBG
- Ano
- 2023
- Cargo
- Ana Jr ( )

- CCerto
- EErrado

GabaritoC — Certo
Gabarito: Certo. O comando apresentado está sintaticamente correto e atende exatamente ao que o enunciado pede: atualizar o salário do funcionário com IdFuncionario = 1 para o maior salário da tabela. A técnica utilizada é a de uma subconsulta na cláusula FROM do UPDATE, que calcula o valor máximo e o disponibiliza como uma tabela derivada (alias s), permitindo que o SET o utilize diretamente.
O comando UPDATE é a instrução da sublinguagem DML (Data Manipulation Language) responsável por modificar dados já existentes em uma tabela. Sua sintaxe básica é UPDATE nome_da_tabela SET coluna = valor WHERE condição;. No caso da questão, o valor a ser atribuído não é uma constante, mas sim o resultado de uma consulta agregada — o maior salário da tabela. Para isso, o SQL permite que uma subconsulta seja usada na cláusula FROM do UPDATE, criando uma tabela temporária (derivada) que pode ser referenciada no SET.
Vamos decompor o comando:
UPDATE funcionario AS f — define a tabela-alvo da atualização e atribui a ela o alias f.
(SELECT max(salario) as maxsalario FROM funcionario) AS s — é a subconsulta que calcula o maior salário de toda a tabela funcionario e a trata como uma tabela derivada com o alias s. Essa subconsulta retorna uma única linha com uma única coluna chamada maxsalario.
SET f.salario = s.maxsalario — atribui à coluna salario da tabela f (que é a tabela funcionario) o valor da coluna maxsalario da tabela derivada s.
WHERE f.idfuncionario = 1 — restringe a atualização apenas ao registro cujo idfuncionario é igual a 1.
Essa é uma forma válida e comum de se atualizar uma tabela com base em um valor calculado a partir dela mesma. O uso de alias (AS f e AS s) é essencial para que o banco de dados consiga distinguir a tabela original da tabela derivada, evitando ambiguidade. O comando funciona em SGBDs que suportam a sintaxe de UPDATE com FROM, como o PostgreSQL, o SQL Server e o MySQL (embora com pequenas variações de sintaxe).
Um ponto importante é que a subconsulta SELECT max(salario) FROM funcionario é executada antes da atualização, calculando o maior salário com base nos dados atuais. Como o WHERE restringe a atualização a apenas um registro (o de idfuncionario = 1), não há risco de o valor máximo ser alterado durante a execução do comando, pois apenas uma linha é modificada e ela não é a que define o máximo (a menos que o funcionário 1 já tenha o maior salário, caso em que o valor permaneceria o mesmo).
A pegadinha que a banca poderia explorar aqui seria a de inverter a ordem das cláusulas ou usar uma subconsulta na cláusula SET de forma incorreta, mas o comando apresentado está perfeitamente alinhado com a sintaxe padrão do SQL para esse tipo de operação.
A banca poderia tentar confundir o candidato com a ordem das cláusulas ou com a necessidade de usar JOIN em vez de uma subconsulta na FROM. Aqui, a subconsulta na FROM é a técnica correta e suficiente — não há necessidade de JOIN explícito, pois a subconsulta retorna um valor escalar (uma única linha e coluna) que é usado diretamente no SET.
O comando está correto. A subconsulta (SELECT max(salario) as maxsalario FROM funcionario) AS s calcula o maior salário da tabela e o disponibiliza como uma tabela derivada. O UPDATE então usa esse valor para atualizar o salário do funcionário com idfuncionario = 1. A sintaxe é válida em SGBDs que suportam UPDATE com FROM, e o resultado é exatamente o que o enunciado pede: o funcionário 1 passa a ter o maior salário da tabela.
Gabarito: Certo
Link permanente: /questoes/ce397763