DATE() es una función que convierte un string en una fecha, o bien devuelve la parte de fecha de un DATETIME.
El problema puede ser de lógica:
Si el contenido de la variable de fecha es un DATE, entonces tu sentencia no te devolverá los valores posteriores a la hora 00:00:00 que puedan figurar en el campo A.fecha, por cuanto CURDATE() transformado a DATETIME contiene la hora cero y no el momento actual si es posterior. En ese caso es mejor usar NOW(), que sí te devuelve el DATETIME del momento actual.
Hay que recordar que las funciones de fecha pueden tener comportamientos erráticos dependiendo de la versión de MYSQL usada (3, 4, o 5). Por ello, es mejor usar los tipos de columna correctos, o de lo contrario la migración puede no devolver lo que se espera (la versión 4 contenía muchos bugs respecto de las funciones de fecha).
Yendo al caso, yo probaría:
Código sql:
Ver originalSELECT
A.numPeticion,
A.fecha,
P.nombre,
P.apepat,
P.apemat
FROM paciente P INNER JOIN historiaClinica H USING(idPaciente)
INNER JOIN atencion A USING(idPaciente)
WHERE A.fecha BETWEEN '{$fecha}' AND NOW();
Esto debería devolver los registros comprendidos entre la fecha de $fecha y el momento actual
del server.
Por otro lado, hay que resolver con lógica la secuencia de tablas: Debes poner las tablas en el mismo orden de llenado verificable y usar LEFT JOIN
si una de las tablas puede que no contenga el idPaciente, o de lo contrario no será listado.
Recuerda: El uso del INNER JOIN exige que
todas las tablas del FROM contengan el dato de enlace, o sino los registros
no aparecerán.