Artigo original: SQL Delete Row Statement - How to Remove Data From a Table With Example Queries

Não exagero ao dizer que gosto muito de trabalhar com o SQL em meus projetos pessoais e profissionais.

Sua simplicidade e o fato de ser direto ao ponto apelam para o meu desejo de ter limites bem definidos com relação ao que a linguagem me deixará ou não "sair impune" em termos de sintaxe.

O SQL é estruturado de maneira clara e concisa em termos de operação, onde a entrada do usuário dita os dados retornados. Daí meu comentário sobre ter limites bem definidos na sintaxe.

Embora eu celebre sua resiliência (o SQL foi criado em 1974, tendo sido lançado inicialmente em 1986) na comunidade de desenvolvedores, também sei que, ao trabalhar com dados, pode parecer que até mesmo os fundamentos são estressantes e assustadores.

Estou aqui (espero) para lançar luz sobre esses fundamentos de trabalho com dados: excluir uma linha inteira de dados.

Embora não analisemos o processo de estabelecer uma tabela no SQL ou de preencher essa tabela com dados/atualizar esses dados, faço aqui o link para esses outros artigos (em inglês) caso você queira saber mais ou ainda revisar o assunto.

Certo. Agora, vamos à parte divertida – vamos começar a excluir dados de uma tabela!

Visão geral de exclusão de linhas no SQL

Aqui está a tabela, que chamamos de Cute_Doggos (cachorros fofos), que usaremos em nosso exemplo para a exclusão de dados:

NameColorBreedAgeWeightHeightFav_FoodFav_ToyDislikesAllergies
daisyredstandard dachshund1 yr146salmon flavored kibblesqueeky ballbirds flying over the yardcats, baths, cleanliness
winstonblack/tanrottweiler3 yrs4117literally anythingrope tugstaying off the couchlistening, behaving, not slobbering on everything
sammielight honeygolden retriever9 yrs4619beef flavored kibbleher bedrambutcious puppiesnone known
penelopegray and whitehusky9 months1612old shoesoutsidekennelnone known

Como você pode ter imaginado, são dados fictícios de uma tabela que eu tirei do nada. 🙂 Porém, espero que eles ilustrem aquilo a que nos dispomos.

Como acontece com a maioria dos aspectos de natureza técnica, nunca é demais verificar a documentação oficial também. Se você deseja fazer isso, a Microsoft tem ótimas informações detalhadas sobre a instrução DELETE no SQL (em inglês).

Vamos ao que importa nesse artigo – falar de exclusão de dados.  A ação é tão simples quanto o próprio nome e aqui está a sintaxe de base:

DELETE FROM nome_da_tabela

***Com essa sintaxe, você exclui todas as linhas de dados da tabela inteira.***

Em nosso exemplo acima, a consulta seria a seguinte:

DELETE FROM Cute_Doggos

Esse pode ser nossa finalidade. Quanto mais você escrever SQL, mais casos você encontrará de se usar a instrução DELETE nesse sentido.

Eu usei essa declaração muitas vezes para limpar uma tabela depois que ela foi preenchida com dados de teste. Essa abordagem nos permite manter os nomes de coluna, tipos de dados, índices e estrutura geral da tabela, de fato, sem excluir a tabela real.

Como observação, se sua finalidade for a de excluir todas as linhas dentro de uma tabela, a abordagem mais rápida seria a de usar a instrução TRUNCATE TABLE (em inglês), já que usa muito menos recursos de sistema.

Exemplo de consultas com Delete

Na grande maioria das vezes, quando você usa a funcionalidade DELETE, você vai querer direcionar melhor sua abordagem. Para isso, adicionaremos uma condição e a sintaxe ficará assim:

DELETE FROM nome_da_tabela WHERE condicoes_existentes

Usando nossa tabela de cães acima, a consulta teria essa aparência:

DELETE FROM Cute_Doggos WHERE dbo.Cute_Doggos.Height > 18

Isso removeria todas as entradas da nossa tabela que correspondam à nossa condição de que a altura (height) seja maior que 18. Se você estiver usando o Microsoft SQL Server Manager, receberá uma instrução de retorno assim:

(1 row affected) (1 linha afetada)

Se você quiser ver as linhas de dados que foram excluídas (para fins de registro, indicações visuais para usuários e assim por diante), podemos usar a instrução OUTPUT para fazer exatamente isso.

Nossa tabela, agora, ficaria assim:

NameColorBreedAgeWeightHeightFav_FoodFav_ToyDislikesAllergies
daisyredstandard dachshund1 yr146salmon flavored kibblesqueeky ballbirds flying over the yardcats, baths, cleanliness
winstonblack/tanrottweiler3 yrs4117literally anythingrope tugstaying off the couchlistening, behaving, not slobbering on everything
penelopegray and whitehusky9 months1612old shoesoutsidekennelnone known

A condição que definimos é totalmente nossa escolha. Se isso for muito estreito para suas necessidades, há outras opções.

Digamos que você não se importe com os registros específicos que remove, apenas que você precisa remover um certo número de registros na tabela.

DELETE TOP 2 FROM Cute_Doggos

Você pode estar pensando que essa consulta removeria os dois primeiros registros da tabela – e você não está muito longe da verdade. O único problema é que, como o SQL armazena registros em uma ordem aleatória, essa sintaxe removerá dois registros ALEATÓRIOS da tabela.

Se quiser remover uma porcentagem de registros, o SQL também consegue fazer isso:

DELETE TOP 25 PERCENT FROM Cute_Doggos

Mais uma vez, a consulta excluirá registros ALEATÓRIOS. Em nosso exemplo, como temos quatro registros, essa consulta excluiria um registro aleatório (4 * 0.25 = 1).

Como comentário final, ao usar a palavra-chave TOP, não podemos usar uma instrução ORDER BY, em função da aleatoriedade do armazenamento de registros.

Conclusão

Agora que você viu a instrução DELETE em ação, você está pronto para testar e excluir todos os dados de todas as tabelas! Quem sabe não faça isso? Poderá custar um final de semana prolongado de restauração de backups. 😉

De qualquer forma, agora você está pronto para começar a usá-la bem.

Espero que o artigo tenha sido útil. Confira meu blog (em inglês). Atualmente, estou reconstruindo o blog em Gatsby/WordPress. Confira um artigo em breve sobre o assunto. No blog, eu frequentemente publico artigos sobre desenvolvimento para a web, vida em geral e aprendizagem.

Enquanto estiver lá no blog, inscreva-se também na minha newsletter. Você pode fazer isso no canto superior direito da página principal do blog. Gosto de enviar artigos interessantes (meus e de outros autores), recursos e ferramentas para desenvolvedores de vez em quando.

Se tiver perguntas sobre este artigo ou sobre qualquer coisa em geral, deixe um oi no Twitter, em outra rede social que você encontrar na newsletter, na página principal do blog ou no meu perfil aqui no freeCodeCamp. 😀

Tenha um ótimo dia! Boa aprendizagem e uma ótima programação para você.