The following snippet finds all duplicates in a table and then separates them:

[sql]SELECT ID, LastName, FirstName
  FROM (SELECT ID,
               LastName,
               FirstName,
               RANK() OVER(PARTITION BY LastName, FirstName ORDER BY ID) AS SeqNumber
          FROM Customers)
 WHERE SeqNumber > 1;
[/sql]

RANK() assigns a number value in SeqNumber column which separate duplicate rows (SeqNumber > 1), or non-duplicate rows (SeqNumber = 1). It should then be able to find only the rows that need to be deleted and not all duplicates.