I don't have an MSSQL database to test, so my answer could be far off the mark, but I noticed in your failing query the fieldname "id" is all lowercase and in the working query it is all uppercase. Could it be that MSSQL is case-sensitive for the fieldnames?
A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James
My blog: Imperial Deltronics