Everything is working as intended. The situation is that when you insert using SYSDATE, you don't just get 10-MAY-02, you get 10-MAY-2002 07:53:15.90 or whatever the actual date-time is then. When you insert using a literal, you get all zeros for anything you didn't include. Thus when you insert 10-MAY-02, what you really inserted was 10-MAY-2002 00:00:00.00. When you use between, you get everything 10-MAY-2002 00:00:00.00 and earlier. The sysdate is AFTER that date-time, and is thus not included. Want to avoid excluding that row? Use SYSDATE in the between clause also.