According to cdonner, in his answer here and on his blog.
He claims that BETWEEN with date yields inconsistent results
From his blog:
<
Very useful discussion!
I had similar issues, resolved by using CAST and CONVERT, as in:
cast(CONVERT(varchar(8), [PostDate], 112)AS DATE) BETWEEN '2013-01-01' AND '2013-01-31'
Works like a charm, as verified with multiple detailed validations.
The "Cast(" is required (believe me, I have the bald spots to prove it). But didn't have to declare variables, etc.
Would be interested in feedback, if I'm missing the boat with the method or my response.
Thanks!