em vez de abaixo do código
BEGIN
INSERT INTO EmailsRecebidos (De, Assunto, Data)
VALUES (@_DE, @_ASSUNTO, @_DATA)
WHERE NOT EXISTS ( SELECT * FROM EmailsRecebidos
WHERE De = @_DE
AND Assunto = @_ASSUNTO
AND Data = @_DATA);
END
substituir com
BEGIN
IF NOT EXISTS (SELECT * FROM EmailsRecebidos
WHERE De = @_DE
AND Assunto = @_ASSUNTO
AND Data = @_DATA)
BEGIN
INSERT INTO EmailsRecebidos (De, Assunto, Data)
VALUES (@_DE, @_ASSUNTO, @_DATA)
END
END
Atualizado: (obrigado a @Marc Durdin por apontar)
Observe que, sob carga alta, isso às vezes ainda falhará, porque uma segunda conexão pode passar no teste IF NOT EXISTS antes que a primeira conexão execute o INSERT, ou seja, uma condição de corrida. Consulte stackoverflow.com/a/3791506/1836776 para obter uma boa resposta sobre por que mesmo envolver uma transação não resolve isso.