Banco de Dados - SQL Server

Insert Top (N) X Insert Select Top (N)

Este artigo tem por objetivo mostrar a diferença dos resultados obtidos com o use dos comandos INSERT TOP (N) e INSERT SELECT TOP (N)

por Luiz Phellipe Euzebio Damião



Esses dias, navegando em fóruns técnicos na internet, me deparei com um post de uma pessoa que estava com dúvida quanto ao uso do Insert Top (n) ou Insert Select Top(N) e resolvi escrever um pouco sobre o assunto.

Afinal, qual a diferença entre as duas sentenças abaixo:

Insert Top(1) Into  tbInsertTopN  

   Select   Codigo,

            Descricao  

   From     tbFonteDados

   Order by Codigo Desc

                                         

Insert Into  tbSelectTopN   

   Select  Top(1) Codigo,

            Descricao  

   From     tbFonteDados

   Order by Codigo Desc

Tirando o fato de que os dados são inseridos em duas tabelas diferentes, as duas instruções aparentam fazer a mesma coisa, ou seja, inserirem o primeiro registro do Select nas tabelas especificadas no Insert. Mas na prática elas fazem a mesma coisa? Na verdade, não.

O que acontece na prática, é que no primeiro caso(INSERT TOP(n)) o SQL não efetua o Sort (Ordenação) dos valores. Logo, o primeiro valor que retornar no select será incluido na tabela especificada no Insert, como podemos no plano de execução da query na figura a seguir.

Já no segundo caso, o SQL Server efetua o Sort antes de inserir os registros na tabela especificada no Insert (Note que é um processo mais trabalhoso para o sql pois ele tem que ler os registros, ordená-los e só depois inserir).

Espero que seja útil, e que tenha ficado bem claro.

Em anexo, tem o script utilizado para o teste. Até a próxima.

Luiz Phellipe Euzebio Damião

Luiz Phellipe Euzebio Damião - Colunista do Linha de Código (www.linhadecodigo.com.br)