Marcelo,
te diré antes que nada que no me gusta mucho cómo estableces la relación entre las tablas agentes y evaluaciones por medio de campos de texto, Nombre_agente y agente_evaluado, respectivamente. Pero lo que no es aceptable es poner la fecha_evaluacion como varchar. Tendría que ser un campo de tipo date; y tampoco veo razonable lo de la hora como varchar, cuando la hora debería ser de tipo time, y si siempre va a ir unida a la fecha, puesto que es fecha y hora de la evaluación, deberían aparecer los datos de fecha y hora en un único campo de tipo datetime. Debes cuidar esas cosas si quieres que luego todo sea más fácil y la tabla ofrezca mejor rendimiento. Pero vamos a por la consulta que quieres.
Prueba con esto:
Cita: SELECT a.Nombre_agente, a.Empleador_agente, a.tipo_turno, a.Estado, IFNULL( T1.eval, '0' ) evaluaciones
FROM agentes a
LEFT JOIN (SELECT a.Nombre_agente na, COUNT( a.Nombre_agente ) eval
FROM agentes a
INNER JOIN `evaluaciones` e ON a.Nombre_agente = e.agente_evaluado
WHERE e.fecha_evaluacion
BETWEEN '2008/08/01'
AND '2008/08/30'
GROUP BY a.Nombre_agente
)T1 ON a.Nombre_agente = T1.na
ORDER BY a.Nombre_agente
HE EDITADO para hacer algunas correcciones, puesto que de la tabla evaluaciones sólo necesitas la cuenta de evaluaciones, no es necesario un segundo left join y tampoco una segunda agrupación...