Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2025
Banco de Dados›Consultas e Comandos em SQL
Código
fc150349
Banca
FCC
Órgão
SEFAZ PI
Ano
2025
Cargo
Ag Trib ( )
Uma Secretaria da Fazenda Estadual mantém a tabela multas_tributarias com informações sobre multas aplicadas a contribuintes. A estrutura da tabela é apresentada a seguir: id_multa (INT) : Identificador único da multa cnpj_contribuinte(VARCHAR): CNPJ do contribuinte valor_multa(DECIMAL): Valor da multa data_aplicacao(DATE) : Data de aplicação da multa status(VARCHAR) : Status da multa (exemplo: "Pendente", "Paga") Devido a uma decisão judicial, todas as multas pendentes aplicadas antes de 2023 devem ter seu valor reduzido em 10%. Em um banco de dados aberto e em condições ideais, o comando SQL que realiza essa atualização é:
AUPDATE multas_tributarias SET valor_multa = valor_multa * 1.9 WHERE status = 'Pendente' AND data_aplicacao < '2023-01-01';
BUPDATE multas_tributarias SET valor_multa = AVG (valor_multa) * 0.9 WHERE status = 'Pendente' AND data_aplicacao < '2023-01-01';
CUPDATE multas_tributarias SET valor_multa = valor_multa * 0.9 WHERE status = 'Pendente' AND data_aplicacao < '2023-01-01';
DUPDATE multas_tributarias SET valor_multa = valor_multa - 10 WHERE status = 'Pendente' AND data_aplicacao < '2023-01-01';
EUPDATE multas_tributarias SET valor_multa = valor_multa * 0.9 WHERE status = 'Paga' AND data_aplicacao < '2023-01-01';
Revelar gabarito e comentário▾
GabaritoC — UPDATE multas_tributarias SET valor_multa = valor_multa * 0.9 WHERE status = 'Pendente' AND data_aplicacao < '2023-01-01';
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”.
Comando UPDATE no SQL: atualização condicional de registros
Gabarito: letra C. Para reduzir em 10% o valor das multas pendentes aplicadas antes de 2023, o comando correto é UPDATE multas_tributarias SET valor_multa = valor_multa * 0.9 WHERE status = 'Pendente' AND data_aplicacao < '2023-01-01'; — multiplicar o valor por 0,9 equivale a aplicar um desconto de 10%, e o filtro WHERE seleciona exatamente os registros que devem ser alterados (status 'Pendente' e data anterior a 2023).
O comando UPDATE é a instrução da linguagem SQL responsável por modificar dados já existentes em uma tabela. Sua sintaxe básica é UPDATE nome_da_tabela SET coluna = novo_valor WHERE condição;. A cláusula SET define quais colunas serão alteradas e qual será o novo valor; a cláusula WHERE é opcional, mas essencial quando se deseja atualizar apenas um subconjunto de registros — sem ela, todos os registros da tabela seriam modificados, o que seria um erro grave em um cenário real.
No problema apresentado, a exigência é reduzir o valor das multas em 10%. Reduzir um valor em 10% significa que o novo valor será 90% do valor original, ou seja, valor_multa * 0.9. É importante não confundir com aumentar em 10% (que seria * 1.1) nem com reduzir para 10% do valor (que seria * 0.1). A operação aritmética é aplicada diretamente na coluna, referenciando o valor atual de cada linha que atende à condição.
O filtro WHERE combina duas condições com o operador lógico AND: status = 'Pendente' (apenas multas ainda não pagas) e data_aplicacao < '2023-01-01' (aplicadas antes de 1º de janeiro de 2023). A comparação de datas com o operador < seleciona corretamente todas as datas anteriores àquela referência. A combinação com AND garante que ambas as condições sejam verdadeiras simultaneamente, restringindo a atualização exatamente ao conjunto desejado.
A banca explora aqui a confusão entre o fator de multiplicação correto para um desconto de 10% e outros valores, além de testar a compreensão do filtro correto. O candidato que não domina a semântica do UPDATE ou que se confunde com a aritmética do percentual pode facilmente cair nos distratores. A chave é lembrar que "reduzir em 10%" = "multiplicar por 0,9" e que o WHERE deve refletir exatamente as condições do enunciado.
1Reduzir 10% = × 0,9
2Filtrar status 'Pendente'
3Filtrar data < 2023
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
O erro está no fator de multiplicação: valor_multa * 1.9aumentaria o valor em 90%, não o reduziria em 10%. Multiplicar por 1,9 significa que o novo valor é 190% do original, um acréscimo absurdo. O fator correto para um desconto de 10% é 0,9 (100% − 10% = 90%).
Alternativa B — ❌ Incorreta
Esta alternativa usa a função de agregação AVG(valor_multa) dentro do SET, o que é inválido. A função AVG calcula a média de um conjunto de valores e só pode ser usada em consultas com GROUP BY ou como subconsulta — não pode ser aplicada diretamente na cláusula SET de um UPDATE para cada linha individual. Além disso, mesmo que fosse possível, a intenção não é substituir o valor pela média, mas sim aplicar um percentual sobre o valor de cada multa.
Alternativa C — ✅ Correta ⟵ GABARITO
O comando está correto: SET valor_multa = valor_multa * 0.9 reduz cada valor em 10%, e o WHERE filtra corretamente as multas com status = 'Pendente' e data_aplicacao < '2023-01-01'. A multiplicação por 0,9 é a forma padrão de aplicar um desconto percentual em SQL.
Alternativa D — ❌ Incorreta
A operação valor_multa - 10 subtrai um valor fixo de 10 unidades monetárias, não um percentual. O enunciado pede uma redução de 10% sobre o valor, que é proporcional — para uma multa de R$ 1.000,00, a redução seria de R$ 100,00; para uma de R$ 500,00, seria de R$ 50,00. A subtração de um valor constante não atende ao requisito.
Alternativa E — ❌ Incorreta
O filtro está errado: status = 'Paga' seleciona as multas já pagas, enquanto o enunciado exige que apenas as multas pendentes sejam atualizadas. A condição correta é status = 'Pendente'. O restante do comando (multiplicação por 0,9 e filtro de data) está correto, mas o status invertido torna a alternativa incorreta.
Gabarito: letra C — a única que combina o fator de redução correto (0,9) com o filtro exato do enunciado (status 'Pendente' e data anterior a 2023).