Perancang MySQL memasukkan ekstensi tidak standar mereka ke GROUP BY dalam upaya membuat pengembangan lebih mudah dan kueri tertentu lebih efisien.
Berikut alasan mereka.
https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html
Ada mode server yang disebut ONLY_FULL_GROUP_BY yang menonaktifkan ekstensi tidak standar. Anda dapat mengatur mode ini menggunakan pernyataan ini.
SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY'
Berikut kutipan dari halaman itu, dengan penekanan ditambahkan.
Jika
ONLY_FULL_GROUP_BYdinonaktifkan, ekstensi MySQL ke SQL standar menggunakanGROUP BYmengizinkan daftar pilih,HAVINGkondisi, atauORDER BYlist untuk merujuk ke kolom yang tidak diagregasi meskipun kolom tidak bergantung secara fungsional padaGROUP BYkolom... Dalam hal ini, server bebas memilih nilai apa pun dari setiap grup , jadi kecuali keduanya sama, nilai yang dipilih adalah nondeterministik , yang mungkin bukan yang Anda inginkan.
Kata yang penting di sini adalah nondeterministik. Apa artinya? Artinya acak, tapi lebih buruk. Jika server memilih nilai acak, itu berarti ia akan mengembalikan nilai yang berbeda dalam kueri yang berbeda, jadi Anda memiliki peluang untuk menangkap masalah saat Anda menguji perangkat lunak Anda. Tapi nondeterministik dalam konteks ini berarti server memilih nilai yang sama setiap saat, sampai tidak.
Mengapa itu bisa mengubah nilai yang dipilihnya? Upgrade server adalah salah satu alasannya. Perubahan ukuran tabel mungkin lain. Intinya, server bebas mengembalikan nilai apa pun yang diinginkannya.
Saya berharap orang yang baru belajar SQL akan mengatur ONLY_FULL_GROUP_BY ini mode; mereka akan mendapatkan hasil yang jauh lebih dapat diprediksi dari kueri mereka, dan server akan menolak kueri nondeterministik.