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 );