trigger DuplicateContact on Contact (before insert) { Set emailAddresses = new Set(); for (Contact contact : Trigger.New) { if (emailAddresses.contains(contact.Email)) { contact.Email.addError('Email already exists!'); } else { emailAddresses.add(contact.Email); } } List existingContacts = [ SELECT Id, Email FROM Contact WHERE Email IN :emailAddresses ]; for (Contact contact : Trigger.New) { for (Contact existingContact : existingContacts) { if (contact.Email == existingContact.Email && contact.Id != existingContact.Id) { contact.Email.addError('Email already exists!'); } } } }