Um fato interessante que poucos sabem é que você não precisa validar se uma lista é vazia antes de inseri-lá, pois mesmo que ela esteja vazia não ocorrerá nenhuma excessão e também não contará nenhuma DML.
exemplo de código, validando a lista:
trigger OpportunityTrigger on Opportinuty (after insert)
{
List<Contact> contacts = new List<Contact>();
for (Opportunity opp: Trigger.New)
{
Contact con = new Contact();
con.LastName = opp.Name;
con.AccountId = opp.AccountId;
contacts.add(opp);
}
if(!contacts.isEmpty()){
insert contacts;
}
}
exemplo de código sem a validação:
trigger OpportunityTrigger on Opportinuty (after insert)
{
List<Contact> contacts = new List<Contact>();
for (Opportunity opp: Trigger.New)
{
Contact con = new Contact();
con.LastName = opp.Name;
con.AccountId = opp.AccountId;
contacts.add(opp);
}
insert contacts;
}
Agora que você já sabe não precisa mais validar listar antes de um DML..
Se você não acreditar em mim, faça o teste como eu fiz abaixo:

