En primer lugar, usar un VARCHAR para almacenar fechas, es una enorme metida de pata. No se hace, para eso existen los campos DATE, DATETIME y TIMESTAMP; y no se hace porque usar campos VARCHAR los hace proclives a errores de consultas, y fuerza a usar funciones de conversión que terminan impactando negativamente en la performance.
¿Se entiende?
Segundo:
Cita: El problema es que solo coge el primer valor de la fecha, en este caso el 31 y omite el mes y el año.
Eso parece un problema de datos, más que de consulta, pero sin ver los datos
reales de la tabla, no hay mucho más para decir.
En cualquier caso, deberías probar haciendolo así:
Si eso falla, tienes realmente un problema de datos...