Ho riletto la tua domanda iniziale e ho trovato la seguente soluzione:
SELECT *
FROM users
WHERE id IN
(SELECT id
FROM users t4
INNER JOIN
(SELECT soundex(fname) AS snd,
COUNT(*) AS cnt
FROM users AS t5
GROUP BY snd
HAVING cnt > 1
)
AS t6
ON soundex(t4.fname)=snd
)
AND id NOT IN
(SELECT MIN(t2.id) AS wanted
FROM users t2
INNER JOIN
(SELECT soundex(fname) AS snd,
COUNT(*) AS cnt
FROM users AS t1
GROUP BY snd
HAVING cnt > 1
)
AS t3
ON soundex(t2.fname)=snd
GROUP BY snd
);
È un po' troppo complicato, ma funziona e offre esattamente ciò che hai chiesto :)