Hola SirSocket:
Hay varias cosas que hay que tomar en cuenta. Primero, dices que tienes tus campos año, mes y día en columnas separadas, pero no nos dices de qué tipo de datos son las columnas, varchar, entero y otro tipo.
Segundo, deberías comentarnos cómo estás almacenando los meses y días de un dígito, por ejemplo Enero, lo estás almacenando como '01' o como 1.
Tercero en tu declaración de la variable @DateTime no estás especificando una longitud, por lo tanto solo te va a almacenar un caracter, para almacenar la fecha completa debería ser de al menos 8 caracteres.
Cuarto, para comparar fechas tal y como lo estás poniendo, es decir comparándola contra una cadena con el formato ANSI el primer campo debe ser tipo fecha, es decir comparas datetime contra cadena. si comparas cadena contra cadena estarías comparando ALFABETICAMENTE.
te dejo un script de cómo sería si tus campos son varchar, si nos manejas con un tipo de dato distinto es cuestión de que hagas las adecuaciones necesarias.
Código SQL:
Ver originalDECLARE @DateTime nvarchar(10)
DECLARE @movimientos TABLE (anio VARCHAR(4), mes VARCHAR(2), dia VARCHAR(2))
INSERT INTO @movimientos VALUES ('1999', '12', '31')
INSERT INTO @movimientos VALUES ('2001', '01', '01')
INSERT INTO @movimientos VALUES ('2003', '01', '01')
INSERT INTO @movimientos VALUES ('2005', '01', '01')
INSERT INTO @movimientos VALUES ('2007', '01', '01')
INSERT INTO @movimientos VALUES ('2009', '01', '01')
INSERT INTO @movimientos VALUES ('2011', '01', '01')
INSERT INTO @movimientos VALUES ('2011', '01', '02')
SELECT CONVERT(datetime, anio + mes + dia) fecha
FROM @movimientos
WHERE
CONVERT(datetime, anio + mes + dia) >= '20000101' AND
CONVERT(datetime, anio + mes + dia) <= '20110101'
/*
fecha
-----------------------
2001-01-01 00:00:00.000
2003-01-01 00:00:00.000
2005-01-01 00:00:00.000
2007-01-01 00:00:00.000
2009-01-01 00:00:00.000
2011-01-01 00:00:00.000
*/
Saludos
Leo.