igual y no soy un experto en sentencias SQL, pero creo que te devuelve toodos los registros porque tenés, por lo menos, un campo que no se repite nunca (un ID?)
Si el resultado de la consulta es sólo buscar duplicado en determinado campo, mi método funciona y el del DISTINCT también. Pero olvidate del uso del "*". Sólo debés incluir los campos que tienen duplicados
... si es que no me equiboco