Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2022

Banco de DadosSQL
Código
fg047175
Banca
FGV
Órgão
CGU
Ano
2022
Nível
Superior
Cargo
Auditor Federal de Finanças e Controle - Tecnologia da Informação
No contexto do SQL Server 2019, considere o script SQL a seguir.create table XPTO (C1 int identity,C2 varchar(16))insert into XPTO (C2) values ('A')insert into XPTO (C2) values ('B')insert into XPTO (C2) values ('C')truncate table XPTOinsert into XPTO (C2) values ('D')insert into XPTO (C2) values ('E')delete from XPTOtruncate table XPTOinsert into XPTO (C2) values ('F')truncate table XPTOApós a execução desse script, o resultado exibido pelo comando select max(C1) from XPTO é:
  1. A0
  2. BNULL
  3. C1
  4. D3
  5. E6
Revelar gabarito e comentário

GabaritoB — NULL

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

Comportamento do TRUNCATE e DELETE no SQL Server

Gabarito: letra B (NULL). O TRUNCATE TABLE remove todas as linhas e reinicia o contador da coluna IDENTITY para o valor inicial (1). Já o DELETE remove linhas, mas não reseta o contador. Ao final do script, após o último TRUNCATE, a tabela está vazia, portanto MAX(C1) retorna NULL.

A questão testa a diferença entre os comandos DELETE e TRUNCATE em relação à coluna IDENTITY. No SQL Server, TRUNCATE é um comando DDL que libera as páginas de dados e redefine o valor de seed da identidade. DELETE é DML, apenas remove registros, mantendo o último valor de identidade na memória.

Vamos simular o script passo a passo:

  1. create table XPTO (C1 int identity, C2 varchar(16)) → tabela criada, seed=1, incremento=1.

  2. Insere 'A' → C1=1.

  3. Insere 'B' → C1=2.

  4. Insere 'C' → C1=3.

  5. truncate table XPTO → tabela vazia, seed volta a 1.

  6. Insere 'D' → C1=1 (novo seed).

  7. Insere 'E' → C1=2.

  8. delete from XPTO → tabela vazia, seed permanece 3 (próximo valor serializado).

  9. truncate table XPTO → tabela vazia, seed volta a 1.

  10. Insere 'F' → C1=1.

  11. truncate table XPTO → tabela vazia, seed volta a 1.

  12. select max(C1) from XPTO → sem linhas, função de agregação retorna NULL.

SE LIGUE NESSA!

A função MAX() sobre um conjunto vazio retorna NULL em SQL (padrão ANSI).

Comando

Efeito na tabela

Efeito no contador IDENTITY

Resultado de MAX(C1) após execução

TRUNCATE TABLE

Remove todas as linhas

Reinicia para o valor inicial (1)

NULL (tabela vazia)

DELETE (sem WHERE)

Remove todas as linhas

Não reinicia; mantém o último valor

NULL (tabela vazia)

INSERT

Adiciona uma linha

Incrementa normalmente

Valor da linha inserida

Estado final do script

Tabela vazia (após último TRUNCATE)

Reiniciado para 1

NULL

  1. 1INSERT gera ID1, 2, 3
  2. 2TRUNCATEReseta seed → 1
  3. 3INSERT gera ID1, 2
  4. 4DELETESeed mantido → 3
  5. 5TRUNCATEReseta seed → 1
  6. 6INSERT gera ID1
  7. 7TRUNCATE finalTabela vazia
  8. 8MAX(C1)NULL
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Apresenta 0, que não é um valor possível. MAX de conjunto vazio não é 0, nem mesmo quando há valor padrão.

Alternativa B — ✅ Correta ⟵ GABARITO

Após o último TRUNCATE, a tabela não tem registros. MAX(C1) retorna NULL.

Alternativa C — ❌ Incorreta

Valor 1 seria o primeiro registro após o último truncate, mas o truncate removeu esse registro.

Alternativa D — ❌ Incorreta

Valor 3 seria o maior se o script parasse após a inserção de 'C' e antes de truncar. Mas houve remoções posteriores.

Alternativa E — ❌ Incorreta

Valor 6 nunca foi gerado. O contador máximo foi 3 e depois resetado.

NÃO CAIA NESSA!

A banca explora a confusão entre DELETE e TRUNCATE. Muitos candidatos pensam que DELETE também reseta a identidade, mas no SQL Server apenas TRUNCATE o faz. Outro ponto: o último comando é TRUNCATE, não DELETE, então a tabela fica vazia e não há valor máximo possível.

Gabarito: letra B.

Link permanente: /questoes/fg047175