This is probably due to dates having a time:
select '2010-04-15' between '2010-04-01' AND '2010-04-15', -- 1 '2010-04-15 12:00:00' between '2010-04-01' AND '2010-04-15', -- 0 '2010-04-15 12:00:00' between '2010-04-01 00:00:00' AND '2010-04-15 23:59:59' -- 1
Either add time to the range delimiters, or trim the values before comparing:
select '2010-04-15 12:00:00' between '2010-04-01 00:00:00' AND '2010-04-15 23:59:59' -- 1 cast('2010-04-15 12:00:00' as date) between '2010-04-01' AND '2010-04-15' -- 1
I have not tested it, but I suppose performance is better without casting.
source share