Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — FCC 2026

Banco de DadosBanco de Dados Relacionais
Código
fc077598
Banca
FCC
Órgão
SEFAZ-SP
Ano
2026
Nível
Superior
Cargo
Auditor Fiscal da Receita Estadual - AFRE - Tecnologia da Informação e Comunicação - Conhecimentos Especificos (P3)
Uma base tributaria de uma SEFAZ possui duas tabelas:contribuinte (id, cpf_cnpj, nome, situacao) debitos (id, contribuinte_id, valor, tipo_tributo, data_vencimento)A equipe de Banco de Dados deseja listar contribuintes ativos, exibindo o nome e o valor total de débitos vencidos, considerando apenas tributos do tipo IPTU (isto €, data vencimento anterior à data atual). Considerando consultas escritas em um SGBD em que não ha mais de um contribuinte com o mesmo nome na base de dados e em que CURRENT_DATE retorna a data atual, a consulta SQL que atende ao requisito é:
  1. ASELECT c.nome, SUM(d.valor) FROM contribuinte c JOIN debitos d ON c.id = d.id WHERE c.situacao = 'ATIVO' AND d.tipo_tributo = 'IPTU' AND d.data_vencimento < CURRENT DATE GROUP BY c.nome;
  2. BSELECT nome, SUM(valor) FROM contribuinte c LEFT JOIN debitos d ON c.id = d.contribuinte_id WHERE situacao = 'ATIVO' GROUP BY nome HAVING tipo_tributo = 'IPTU';
  3. CSELECT c.nome, SUM(d.valor) AS total_debitos FROM contribuinte c JOIN debitos d ON c.id = d.contribuinte_id WHERE c.situacao = 'ATIVO' AND d.tipo_tributo = 'IPTU' AND d.data_vencimento < CURRENT DATE GROUP BY c.nome;
  4. DSELECT c.nome, valor FROM contribuinte c JOIN debitos d ON c.id = d.contribuinte_id WHERE c.situacao = 'ATIVO' AND d.data_vencimento < CURRENT DATE;
  5. ESELECT c.nome, SUM(d.valor) FROM contribuinte c WHERE c.situacac = 'ATIVO' AND d.tipo_tributo = 'IPTU' GROUP BY c.nome;
Revelar gabarito e comentário

GabaritoC — SELECT c.nome, SUM(d.valor) AS total_debitos FROM contribuinte c JOIN debitos d ON c.id = d.contribuinte_id WHERE c.situacao = 'ATIVO' AND d.tipo_tributo = 'IPTU' AND d.data_vencimento < CURRENT DATE GROUP BY c.nome;

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”.

Consulta SQL: listar contribuintes com débitos vencidos

Gabarito: letra C. A consulta deve: (1) juntar as tabelas contribuinte e debitos pela chave estrangeira contribuinte_id; (2) filtrar contribuintes ativos (situacao = 'ATIVO'); (3) filtrar débitos do tipo IPTU e com data de vencimento anterior à data atual (data_vencimento < CURRENT_DATE); (4) agrupar por nome do contribuinte (pois não há homônimos) e somar os valores dos débitos. A alternativa C é a única que atende a todos esses critérios com sintaxe correta.

Critério

Alternativa A

Alternativa B

Alternativa C (Gabarito)

Alternativa D

Alternativa E

JOIN correto (c.id = d.contribuinte_id)

❌ (usa c.id = d.id)

✅ (LEFT JOIN, mas desnecessário)

✅

✅

❌ (sem JOIN)

Filtro situacao = 'ATIVO'

✅

✅

✅

✅

❌ (erro de digitação 'situacac')

Filtro tipo_tributo = 'IPTU'

✅

❌ (no HAVING, inválido)

✅

❌ (ausente)

✅ (mas sem JOIN)

Filtro data_vencimento < CURRENT_DATE

❌ (usa CURRENT DATE com espaço)

❌ (ausente)

✅

✅

❌ (ausente)

Agregação SUM(valor) com GROUP BY nome

✅

✅ (mas sem filtro adequado)

✅

❌ (sem SUM)

✅ (mas sem JOIN)

Sintaxe SQL válida

❌

❌

✅

❌

❌

Alternativa A — ❌ Incorreta

Usa a condição de JOIN errada: c.id = d.id. A tabela debitos possui a coluna contribuinte_id como chave estrangeira, não id. Além disso, escreve CURRENT DATE (espaço) em vez de CURRENT_DATE (sem espaço), o que é inválido.

Alternativa B — ❌ Incorreta

Emprega LEFT JOIN (desnecessário, pois só interessam contribuintes com débitos), não filtra por data_vencimento e tenta usar a cláusula HAVING tipo_tributo = 'IPTU'. A cláusula HAVING serve para filtrar grupos após a agregação, mas tipo_tributo não está no GROUP BY nem é uma função de agregação, gerando erro.

Alternativa C — ✅ Correta ⟵ GABARITO

Realiza INNER JOIN corretamente (c.id = d.contribuinte_id), aplica todos os filtros no WHERE, soma os valores com SUM(d.valor) e agrupa por c.nome. A sintaxe está conforme o padrão SQL (considerando que CURRENT_DATE é a função para data atual).

Alternativa D — ❌ Incorreta

Falta a função de agregação SUM (exibe valores individuais) e não filtra por tipo_tributo = 'IPTU', listando débitos de todos os tipos.

Alternativa E — ❌ Incorreta

Não faz o JOIN entre as tabelas (tenta acessar d.tipo_tributo sem a tabela debitos na cláusula FROM) e contém erro de digitação (situacac).

NÃO CAIA NESSA!

A banca explora erros comuns: condição de JOIN com coluna errada (A), uso indevido de HAVING para filtrar linhas (B), e ausência de JOIN (E). A alternativa D parece mais completa, mas falta agregação e filtro de tipo. Fique atento à cláusula ON e ao papel do WHERE vs HAVING.

Gabarito: letra C.

Link permanente: /questoes/fc077598