Técnicamente hablando no es un error de MySQL, sino un error de técnicas de programación en el PHP.
El problema es que la consulta puede estar devolviendo cero registros, y el
while se ejecuta siempre al menos una vez, por lo que en realidad cuando sucede, lo hace sobre un registro inexistente.
El por qué puede que te funcione, eso no es posible saberlo desde la óptica del MySQL. Lo que yo te recomiendo es que antes del
while verifiques que efectivamente la consulta haya devuelto al menos
un registro.
Algo como: