SQL Server → PostgreSQL

Como converter DELETE com JOIN do SQL Server para PostgreSQL

O PostgreSQL não aceita JOIN direto no DELETE. Aprenda a usar USING ou NOT EXISTS e detecte todos os pontos de quebra no seu script.

Você rodou DELETE t1 FROM Tabela1 t1 JOIN Tabela2... no PostgreSQL e recebeu erro de sintaxe. Isso é esperado: o T-SQL permite alias e JOIN diretamente no DELETE; o PostgreSQL não.

A regra prática: no Postgres você usa DELETE ... USING outras_tabelas ou reescreve com subconsulta / NOT EXISTS quando o JOIN é LEFT e você filtra linhas órfãs.

Antes (SQL Server)

DELETE t
FROM Itens t
INNER JOIN Pedidos p ON t.PedidoId = p.Id
WHERE p.Status = 'CANCELADO';

Depois (PostgreSQL — USING)

DELETE FROM itens t
USING pedidos p
WHERE t.pedido_id = p.id
  AND p.status = 'CANCELADO';

DELETE com LEFT JOIN

Quando o filtro é IS NULL no lado direito (anti-join), USING não reproduz a mesma semântica. O padrão seguro é NOT EXISTS.

SQL Server

DELETE t FROM Itens t
LEFT JOIN Estoque e ON t.Id = e.ItemId
WHERE e.ItemId IS NULL;

PostgreSQL

DELETE FROM itens t
WHERE NOT EXISTS (
  SELECT 1 FROM estoque e WHERE e.item_id = t.id
);

Analisador de Impacto

Tem mais queries com JOIN para converter? Cole seu script no Analisador de Impacto e veja onde mais seu código vai quebrar.

Abrir Análise de Projeto →