According to the results of clarifications in the comments.
reg_date has a timestamp data type. This means that the reg_date >= :foo AND reg_date <= :foo condition reg_date >= :foo AND reg_date <= :foo only if the entire value and time and date match. And it is not the string "2016-06-20" that is compared, but the string "2016-06-20" after the cast to the timestamp . It is the string that is brought to the timestamp, and not the timestamp is truncated to the date and compared with the string. Date without time to the timestamp given with the time of midnight, i.e. condition:
ads.reg_date >= "2016-06-20" AND ads.reg_date <= "2016-06-20"
The scheduler treats as
ads.reg_date >= "2016-06-20 00:00:00" AND ads.reg_date <= "2016-06-20 00:00:00"
You, apparently, do not have such a value in the table. It is often more convenient to write this way than to get the date of the next day on the application:
ads.reg_date >= "2016-06-20" AND ads.reg_date < "2016-06-20" + interval 1 day
reg_datematters2016-06-20 00:00:00? It is exactly by midnight that the date string is given without time when compared with the timestamp - the date with time. - Fine