trigger ValidateAccount on Account (before insert) { Set accountNames = new Set(); for (Account account : Trigger.New) { if (accountNames.contains(account.Name)) { account.Name.addError('Account name already exists!'); } else { accountNames.add(account.Name); } } List existingAccounts = [ SELECT Id, Name FROM Account WHERE Name IN :accountNames ]; for (Account account : Trigger.New) { for (Account existingAccount : existingAccounts) { if (account.Name == existingAccount.Name && account.Id != existingAccount.Id) { account.Name.addError('Account name already exists!'); } } } }