O uso de
~
sugere que você está usando o Postgres. Nesse caso, as duas consultas estão fazendo coisas muito diferentes. No Postgres, você não inclui a tabela que está sendo atualizada no from
cláusula. Então, acho que você quer:
update fromemailaddress
set call = true
from email
where email.fromemailaddress = fromemailaddress.fromemailaddress and
LOWER(email.subject) ~ 'tester';
Sua versão está atualizando todas as linhas em
fromemailaddress
porque não há nenhuma condição conectando fromemailaddress
na update
cláusula e fea
no from
cláusula. Observe também:a
left join
é desnecessário porque o where
cláusula transforma-o em uma junção interna de qualquer maneira.