No sé, pero me resulta sospechoso el uso del alias y del nombre de los campos. Parece como si el alias b estuviera siendo usado en otra parte de la consulta y confundiera, o que tal vez el nombre tiene alguna diferencia (un espacio, un acento, o algo así). No obstante, te hago otra propuesta usando TIMESTAMPDIFF, por si fuera el TIMEDIFF el causante del problema
Código sql:
Ver originalSELECT a.nombres,
a.apellidos,
DATE_format( b.fecha,'%Y-%m-%d' ),
SEC_TO_TIME( SUM( TIME_TO_SEC( TIMESTAMPDIFF(SECOND, b.horalogin, b.horalogoff ) ) ) ) TIEMPO,
TIME( MIN( b.horalogin ) ) horaprimeraentrada,
TIME( MAX( b.horalogoff ) ) horaultimasalida
FROM usuarios a
LEFT JOIN razontime b ON a.userkey = b.idagente
GROUP BY date_format(b.fecha,'%Y-%m-%d' ), a.userkey;
Otra opción sería revisar los espacios tras las funciones y antes de los paréntesis y también tras el paréntesis. Quita esos espacios y prueba.