Isso está correto e por design:se você não solicitar classificação, o servidor não se incomodará em classificar (a classificação pode ser uma operação cara) e retornará as linhas na ordem que achar melhor. Sem uma ordem solicitada, a forma como os registros são ordenados pode até diferir de uma consulta para outra (embora isso não seja muito provável).
A ordem definitivamente não é aleatória - é apenas a forma como as linhas saem da consulta e, como você vê, mesmo pequenas modificações podem alterar essa ordem significativamente. Essa ordenação "indefinida" é dependente da implementação, imprevisível e não deve ser confiável.
Se você deseja que os elementos sejam ordenados, use o
ORDER BY
cláusula (essa é a sua finalidade) - por exemplo SELECT name FROM difficulties ORDER BY name ASC;
Isso sempre retornará o resultado classificado por nome, em ordem crescente. Ou, se você quiser que eles sejam ordenados pela chave primária, por último no topo, use:
SELECT name FROM difficulties ORDER BY id DESC;
Você pode até classificar por função - se você realmente quer ordem aleatória, faça isso (ressalva:desempenho horrível com tabelas grandes):
SELECT name FROM difficulties ORDER BY RAND();
Para mais detalhes veja este tutorial e a documentação .