MySQL no le está dando un resultado falso, simplemente está usando una implementación de módulo diferente a la que esperaba. Desafortunadamente, el término módulo parece haberse definido de manera algo ambigua, y su implementación varía de un idioma a otro. Por lo que puedo decir en la Wikipedia on Modulo , la implementación de MySQL usa división truncada :
r = a - n * trunc(a / n)
Donde espera que la implementación use división piso :
r = a - n * floor(a / n)
Dado que así implementó su primera solución, diría que es probablemente la mejor alternativa al Mod
operador.
Por lo que he visto (¡y este es un análisis no científico muy rápido!), parece que los lenguajes de programación más imperativos implementan la división truncada y lenguajes matemáticos más funcionales parecen usar división piso .