Cita: y me devuelve: MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas)
Es decir cero registros (no cero columnas) si no hay registros obviamente tampoco hay columnas pero en este caso es antes el huevo que las gallinas...
Si no hubiera columnas el resultado seria un error de sintaxis no un conjunto vacio de datos.
Si no hay registros no hay nada, ni nulos... IFNULL() es una buena solución siempre que haya algo sobre lo que aplicarla.
No veo otra solución que por programación externa si recibes cero REGISTROS crees un registro con ceros de forma "artificial". No explicas conque estas trabajando pero seguramente lo que hace es pasar los datos a una estructura de memoria, por ejemplo un array, para luego tratarlos, por artificial quiero decir que en ese supuesto array crees un elemento con ceros... así no vas a ensuciar la bbdd, la alternativa seria entrar un registro falso en la bbdd...