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 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 select max(C1) from XPTO é:
- A)0
Errada: MAX sobre uma tabela vazia não retorna 0 no SQL Server, e sim NULL.
- B)NULL
Certa: após o último TRUNCATE, a tabela fica vazia, então SELECT MAX(C1) retorna NULL.
- C)1
Errada: 1 seria um valor possível de identity em alguns inserts, mas não é o resultado de MAX com a tabela vazia.
- D)3
Errada: 3 foi um valor gerado em momento anterior, porém foi apagado e não aparece no resultado final.
- E)6
Errada: 6 não corresponde a nenhum comportamento do script nem ao retorno de MAX após esvaziar a tabela.
Gabarito: B
No SQL Server, a coluna IDENTITY gera valores automaticamente, mas o comportamento dela muda conforme a operação feita na tabela. O detalhe mais importante aqui é o TRUNCATE TABLE: além de apagar todos os dados rapidamente, ele também reinicia o contador da identidade para o valor inicial definido na criação da coluna. No script, os primeiros inserts geram 1, 2 e 3. Depois do primeiro TRUNCATE, a identidade volta ao início, então D e E recebem 1 e 2. Em seguida, o DELETE remove as linhas, mas não reinicia a identidade. Quando o script faz outro TRUNCATE, a tabela fica vazia de novo e a identidade é resetada mais uma vez. O insert de F gera um novo valor, mas o último TRUNCATE apaga essa linha também. No fim, a tabela XPTO fica vazia. E aqui entra a regra clássica do SQL: função de agregação como MAX, quando aplicada a conjunto sem linhas, retorna NULL, e não zero nem algum valor "mágico". Por isso o gabarito B está correto. Resumo de prova: TRUNCATE apaga tudo e reseta IDENTITY; DELETE apaga as linhas, mas não reseta a identidade. E MAX em tabela vazia devolve NULL.