SQL DELETE: deletando dados em uma ou mais tabelas!

O comando SQL DELETE é um dos mais importantes da linguagem SQL para quem trabalha gerenciando bancos de dados. Afinal, é com ele que podemos excluir registros que não são mais importantes para a base.

No entanto, quando mal aplicado, esse comando pode trazer grandes prejuízos, como a perda de informações importantes e a inconsistência de dados no banco

Por isso, é perceptível o quão é importante saber usá-lo corretamente, garantido que apenas os dados desejados sejam de fato excluídos. Para ajudar nessa questão, trouxemos este post, no qual você vai conferir:

Fique com a gente e aproveite a leitura!

O que é o comando SQL DELETE?

O comando SQL DELETE é usado para deletar os dados de uma ou mais linhas da tabela. É importante ressaltar que esse comando não exclui estruturas do banco, apenas os dados armazenados nele. 

Ou seja, mesmo que o DELETE seja usado para apagar todos os registros de uma tabela, a sua estrutura ainda vai permanecer intacta no banco de dados. Portanto, ela passará a ser apenas uma tabela vazia.

Qual a sintaxe do comando SQL DELETE?

A sintaxe básica usada para o comando DELETE é:

 DELETE FROM nome_da_tabela 
 WHERE condição; 

Observe que após a expressão FROM indicamos o nome da tabela que vamos excluir os dados. Já na cláusula WHERE definimos a condição que será usada como filtro para encontrar exatamente o registro que será excluído.

Perceba também que nele não há a necessidade de indicar as colunas da tabela que terão seus dados excluídos. Isso porque o comando deleta as informações contidas em todos os campos da linha indicada pela cláusula WHERE.

5 exemplos de uso do comando SQL DELETE

Agora que já foi esclarecido para que serve o comando SQL DELETE, vamos fazer algumas demonstrações práticas de uso dessa expressão. Para isso, nos exemplos abaixo usaremos como base de dados a tabela “funcionarios” mostrada a seguir.

idnomesetorcargosalario
1Alexandre MatosTIDesenvolvedor Web6400
2Fabrice NunesTIAnalista de Dados7530
3Marília DelgadoRHGerente de Recursos Humanos6400
4Alberto RodriguesFinanceiroAnalista Financeiro5870
5Flávia SouzaRHAnalista de Desenvolvimento Humano4500
6Roberto MoraesTIAnalista de Sistemas5870
7Emília FerrazTIDesenvolvedor Web6400
8Vitor CarvalhoFinanceiroAnalista Fiscal3980
9Juliana MartinsTIDesenvolvedor Web6400
10Luana MontenegroRHCoordenador de Recrutamento e Seleção5600
Tabela 1. Tabela funcionarios

1. Usando DELETE com a cláusula WHERE

Para nosso primeiro exemplo, vamos mostrar a forma mais simples de uso do comando DELETE. Nesse caso, queremos excluir o registro com id = 3 na tabela “funcionarios”. O código que atende a esse requisito então seria:

 DELETE FROM funcionarios
 WHERE id = 3; 

Após a execução do comando, nossa tabela estaria assim:

idnomesetorcargosalário
1Alexandre MatosTIDesenvolvedor Web6400
2Fabrice NunesTIAnalista de Dados7530
4Alberto RodriguesFinanceiroAnalista Financeiro5870
5Flávia SouzaRHAnalista de Desenvolvimento Humano4500
6Roberto MoraesTIAnalista de Sistemas5870
7Emília FerrazTIDesenvolvedor Web6400
8Vitor CarvalhoFinanceiroAnalista Fiscal3980
9Juliana MartinsTIDesenvolvedor Web6400
10Luana MontenegroRHCoordenador de Recrutamento e Seleção5600
Tabela 2. Demonstração do exemplo 1

2. Usando DELETE para excluir várias linhas de uma tabela

No exemplo anterior mostramos como excluir uma linha específica da tabela. No entanto, há casos em que precisamos deletar vários dados de uma única vez e apagar linha por linha não seria eficiente.

Considerando novamente a tabela “funcionarios”, se quiséssemos excluir todos os registros em que a coluna “setor” tem valor igual a “RH”, poderíamos usar o seguinte comando:

 DELETE FROM funcionarios
 WHERE setor = 'RH'; 

Agora, observe o resultado que seria obtido após o código acima ser executado:

idnomesetorcargosalário
1Alexandre MatosTIDesenvolvedor Web6400
2Fabrice NunesTIAnalista de Dados7530
4Alberto RodriguesFinanceiroAnalista Financeiro5870
6Roberto MoraesTIAnalista de Sistemas5870
7Emília FerrazTIDesenvolvedor Web6400
8Vitor CarvalhoFinanceiroAnalista Fiscal3980
9Juliana MartinsTIDesenvolvedor Web6400
Tabela 3. Demonstração do exemplo 2

3. Usando DELETE com múltiplas condições

O comando SQL DELETE também permite definir mais de uma condição como filtro na cláusula WHERE usando os operadores lógicos, como AND e OR.

Nesse caso, imagine uma situação em que é necessário excluir os dados das pessoas com salário igual a 6400. Entretanto, queremos excluir apenas daqueles que estão no setor de TI e há funcionários com o mesmo salário em outro setor.

Para cumprir tal propósito, o código que poderíamos usar é:

 DELETE FROM funcionarios
 WHERE salario = 6400
 AND setor = 'TI'; 

No fim da execução, teríamos o resultado a seguir:

idnomesetorcargosalário
2Fabrice NunesTIAnalista de Dados7530
3Marília DelgadoRHGerente de Recursos Humanos6400
4Alberto RodriguesFinanceiroAnalista Financeiro5870
5Flávia SouzaRHAnalista de Desenvolvimento Humano4500
6Roberto MoraesTIAnalista de Sistemas5870
8Vitor CarvalhoFinanceiroAnalista Fiscal3980
10Luana MontenegroRHCoordenador de Recrutamento e Seleção5600
Tabela 4. Demonstração do exemplo 3

Observe que ainda há uma pessoa com salário igual a 6400 na tabela. Afinal, como o seu setor não é o de TI e, portanto, não cumpria os dois requisitos especificados na cláusula WHERE, seus dados não foram apagados.

4. Usando DELETE com o operador LIKE

Agora, para este exemplo, pense em um cenário fictício em que é necessário excluir os dados de todas as pessoas que têm a função de “Analista” no cargo. Porém, há vários cargos em diferentes setores em que esse termo aparece. Então, como eles poderiam ser excluídos de forma eficiente?

Uma solução para essa questão seria utilizar o operador LIKE como filtro na cláusula WHERE. De forma resumida, esse operador é responsável por encontrar padrões dentro de diferentes strings. Assim, o código ficaria da seguinte forma:

 DELETE FROM funcionarios
 WHERE cargo LIKE 'Analista%'; 

E como resultado de sua execução teríamos a tabela de dados:

idnomesetorcargosalário
1Alexandre MatosTIDesenvolvedor Web6400
3Marília DelgadoRHGerente de Recursos Humanos6400
7Emília FerrazTIDesenvolvedor Web6400
9Juliana MartinsTIDesenvolvedor Web6400
10Luana MontenegroRHCoordenador de Recrutamento e Seleção5600
Tabela 5. Demonstração do exemplo 4

5. Usando DELETE com subquery

Neste último exemplo, vamos mostrar uma forma um pouco mais complexa de uso do comando DELETE. No caso, usaremos uma subquery dentro do comando principal para buscar os dados que precisamos. Para isso, usaremos como base as duas tabelas mostradas a seguir.

idnomepreco
1X Burguer25.90
2X Picanha38.90
3Cachorro Quente20.90
4Bauru22.90
Tabela 6. Tabela sanduiches
idPedidoidClientenomeSanduichequantidadedata
110X Picanha12021-07-28
215X Burguer22021-07-06
310Cachorro Quente22021-07-28
48X Picanha32021-07-19
512Bauru22021-05-12
611X Burguer42021-06-09
715X Picanha12021-07-06
Tabela 7. Tabela pedidos

Agora imagine que precisamos deletar da tabela “sanduiches” o sanduíche que não recebeu nenhum pedido no último mês. Para isso, seria necessário verificar na tabela “pedidos” as datas registradas em cada pedido, avaliando se elas são mais recentes do que um mês.

Uma forma de resolver esse problema seria com o comando SQL abaixo:

 DELETE FROM sanduiches s
 WHERE nome NOT IN (
 SELECT nomeSanduiche
 FROM pedidos
 WHERE  data >= CURRENT_DATE - INTERVAL 1 MONTH); 

Boas práticas ao usar o comando SQL DELETE

Ao utilizar o comando DELETE é importante ter atenção à aplicação da cláusula WHERE. Apesar de não ser obrigatória, caso ela não seja utilizada todos os registros da tabela serão deletados. Se esse não for o objetivo, isso certamente vai gerar vários problemas para o banco.

Além disso, é essencial pensar em uma maneira de definir as condições para o filtro de forma que não atrapalhem o desempenho do banco. Também é válido considerar o uso do DELETE dentro de blocos TRY/CATCH para fazer o tratamento de erros.

Por fim, se for necessário excluir todas as linhas da tabela, é interessante considerar o uso do comando TRUNCATE TABLE no lugar do DELETE.

Como foi possível notar ao longo do artigo, o comando SQL DELETE pode ser usado de várias formas diferentes, sendo fundamental entender como aplicá-lo corretamente para evitar erros e inconsistência de dados no banco. Apesar disso, se trata de um comando extremamente útil para quem trabalha diretamente com essa linguagem.

Gostou do conteúdo e quer aprofundar ainda mais seu conhecimento? Então, confira o próximo artigo e descubra o que é Trigger e como usar em SQL!