Hola de nuevo tico74:
Me alegra que hayas encontrado una solución por tu cuenta, no veo nada que pudiera afectar la consulta, parece que es correcta
, sólo el detalle que mencionas de poner 2011 y 2012 fijos no te lo recomiendo, pues la consulta sería válida sólo para este año, tal como supones correctamente podrías sustituirla por
También tienes que tomar en cuenta que el campo nextBirthday lo estarías regresando como una cadena, no como date, (en mi ejemplo es por eso que al final hago un STR_TO_DATE())
Finalmente en la cláusula ORDER BY no le veo sentido a que coloques MONTH(cumple), DAYOFMONTH(cumple), creo que bastaría con poner simplemente esto:
La cláusula ASC también estaría de más, ya que es el valor que toma por defecto.
Como te habrás dado cuenta, MySQL te permite muchas formas de llegar a un mismo resultado, existen muchas funciones sinónimas, como el IF y el CASE-WHEN o para el caso del manejo de fechas
Todas te regresarían "2011", así es que elige la que más te agrade.
Saludos
Leo.