El comportamiento que describe ocurre cuando ORDER BY
una expresión que no está presente en la cláusula SELECT
. El estándar SQL no permite dicha consulta, pero MySQL es menos estricto y lo permite.
Vamos a probar un ejemplo:
SELECT DISTINCT colum1, column2
FROM table1
WHERE ...
ORDER BY column3
Digamos que el contenido de la tabla table1
es:
id | column1 | column2 | column3
----+---------+---------+---------
1 | A | B | 1
2 | A | B | 5
3 | X | Y | 3
Sin la cláusula ORDER BY
, los anteriores devuelve la consulta siguientes dos registros (sin ORDER BY
el orden no está garantizado):
column1 | column2
---------+---------
A | B
X | Y
Pero con ORDER BY column3
, la orden tampoco está garantizada.
La cláusula DISTINCT
opera sobre los valores de las expresiones presentes en la cláusula SELECT
. Si la fila n. ° 1 se procesa primero, entonces (A
, B
) se coloca en el conjunto de resultados y se asocia con la fila n. ° 1. Luego, cuando se procesa la fila # 2, los valores de las expresiones SELECT
producen el registro (A
, B
) que ya está en el conjunto de resultados. Debido a DISTINCT
se cae. La fila 3 produce (X
, Y
) que también se coloca en el conjunto de resultados. A continuación, la cláusula ORDER BY column3
hace que los registros se ordenen en el conjunto de resultados como (A
, B
), (X
, Y
).
Pero si fila # 2 se procesa antes de fila # 1 entonces, siguiendo la misma lógica expuesto en el párrafo anterior, los registros en el conjunto de resultados se ordenan como (X
, Y
), (A
, B
).
No hay ninguna regla impuesta en el motor de base de datos sobre el orden en que procesa las filas cuando ejecuta una consulta. La base de datos puede procesar las filas en cualquier orden que considere mejor para el rendimiento.
Su consulta es SQL no válido y el hecho de que puede devolver resultados diferentes utilizando los mismos datos de entrada lo demuestra.
¿Cuáles son las consultas que está intentando ejecutar? – srivani
@srivani: Seleccione la identificación distinta de la tabla donde id2 = 12312 ordena por tiempo desc. – insomiac
Sé que es demasiado tarde pero todavía no hay una respuesta aceptada, por lo que quiero saber si el OP todavía quiere responder por algo que no está cubierto en las respuestas dadas. –