The best way to strip the time portion from a datetime is like this:
dateadd(dd,0, datediff(dd,0, getDate()))
I used to use and advocate a process that looks like this:
cast(floor(cast(getdate() as float)) as datetime)
But I now believe modern versions of sql server optimize the former snippet to be just as fast or faster.
Unfortunately, as fast as that is it's still going to bog down your query if you need to do it for two datetime values for every row in a where clause or join condition. If possible you want to factor this out somehow so that it's pre-computed as much as possible. You can accomplish that via a view or computed column.
Finally, note that the DATEDIFF function compares the number of boundaries crossed. So the datediff in days between '2009-09-14 11:59:59'
and '2009-09-15 00:00:01'
is 1, but the DATEDIFF in days between '2009-09-15 00:00:01'
and '2009-09-15 11:59:59'
is still zero. Note that it doesn't really care at all about the time portion there. Depending on what your query is trying to do, you might be able to use that to your advantage.
So what you want to do is try both methods and see which works better for your data.