here's the classic technique, per joe celko. it uses a temporary working table.
//use DISTINCT to kill dups
insert into WorkingTable
select distinct * from MessedUpTable
//clean out messed up table
delete from MessedUpTable
//load cleaned up data
insert into MessedUpTable
select * from WorkingTable
//loose temp table
drop table WorkingTable