Debido al ORDER BY id DESC
cláusula, la consulta se trata como si estuviera escrita:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
excepto que el id
las columnas no se devuelven al usuario (usted). El conjunto de resultados debe incluir el id
para poder ordenar por el. Obviamente, este conjunto de resultados tiene cuatro filas, así que eso es lo que se devuelve. (Moraleja:no ordene por columnas ocultas, a menos que sepa qué le hará a su consulta).
Prueba:
SELECT DISTINCT name
FROM table
ORDER BY name;
(con o sin DESC según capricho). Eso devolverá solo las dos filas.
Si necesita saber un id
para cada nombre, considere:
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
Podrías usar MAX con el mismo buen efecto.
Todo esto se aplica a todas las bases de datos SQL, incluida MySQL. MySQL tiene algunas reglas que le permiten omitir las cláusulas GROUP BY con resultados algo no deterministas. Recomiendo no explotar la característica.
Durante mucho tiempo (tal vez incluso ahora) el estándar SQL no permitía ordenar por columnas que no estaban en la lista de selección, precisamente para evitar confusiones como esta. Cuando el conjunto de resultados no incluye los datos de ordenación, la ordenación del conjunto de resultados se denomina "ordenación esencial"; si todas las columnas de ordenación aparecen en el conjunto de resultados, se trata de una 'ordenación no esencial' porque tiene suficientes datos para ordenar los datos usted mismo.