Hi Helen,
You can usually select in the Schedule tab that leads can only run though once, or add in as a filter in the Smart List that they have not already fulfilled the criteria (this depends on what the campaign does).
But, I'm assuming those won't help if you have actual duplicate records. The only thing I can think of is cleaning up the database like you said - Marketo has a pre-populated "Possible Duplicates" smartlist in the Lead Database that could be very helpful for indentifying duplicates.