DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
Can someone explain me this.
this will give you the first of the month for a given date
inner select 
select DATEDIFF(MONTH, 0, GETDATE()) will give the number of months from 1900-01-01
here it is 1350
this will be add to 1900-01-01 , but only the months
select DATEADD(MONTH,1350,0) will give 2012-07-01 00:00:00.000
which is the start of the current month.
I think this is the most efficient way to find the starting of a month for any given date.