Questão nº 58
Questão de Banco de Dados · FGV CGU 2021 - Tarde (nº 58)
No contexto do SQL Server 2019, considere o script SQL a seguir.
```sql
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 XPTO
insert into XPTO (C2) values ('D')
insert into XPTO (C2) values ('E')
delete from XPTO
truncate table XPTO
insert into XPTO (C2) values ('F')
truncate table XPTO
```
Após a execução desse script, o resultado exibido pelo comando
```sql
select max(C1) from XPTO
```
é:
- A0
- BNULL (alternativa correta)
- C1
- D3
- E6
Resposta comentada
Gabarito Alternativa B
Conceito-chave: TRUNCATE remove todas as linhas da tabela e, no SQL Server, zera o contador da coluna IDENTITY. Ou seja, o próximo valor inserido recomeça do 1. Como a tabela fica vazia, MAX(C1) não encontra nenhum valor e retorna NULL.
- (A) Incorreta:
MAXde uma tabela vazia não retorna0; retornaNULL, pois não há nenhum valor para calcular o máximo. - (B) Correta: Após o último
TRUNCATE, a tabela está vazia e o contadorIDENTITYfoi resetado. Como não há linhas,MAX(C1)não tem nenhum valor para avaliar, resultando emNULL. - (C) Incorreta: O valor
1seria o primeiroIDENTITYapós umTRUNCATE, mas como a tabela está vazia (nenhum insert foi feito após o últimoTRUNCATE), não há linha comC1 = 1. - (D) Incorreta: O valor
3seria o máximo se a tabela tivesse as linhas originais ('A', 'B', 'C'), mas o primeiroTRUNCATEjá apagou tudo e resetou o contador. - (E) Incorreta: O valor
6seria o máximo se nenhumTRUNCATEtivesse ocorrido (após 6 inserts), mas cadaTRUNCATEzera o contador, e o últimoTRUNCATEdeixa a tabela sem linhas. Armadilha da banca: muitos alunos somam os inserts (1 a 6) e esquecem queTRUNCATEreseta oIDENTITYe remove todas as linhas, fazendoMAXretornarNULL.
Fonte: FGV CGU 2021 - Tarde Auditor Federal de Finanças e Controle - Área Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.