'2013-03-08 00:00:00.000'
is not an unambiguous format when casting to datetime
. It can either mean 3rd of August or 8th of March.
It depends upon your DATEFORMAT
settings (which in turn depends upon the language of your login).
SET LANGUAGE english
SELECT CAST('2013-03-08 00:00:00.000' AS DATETIME) AS english
SET LANGUAGE british
SELECT CAST('2013-03-08 00:00:00.000' AS DATETIME) AS british
Returns
Changed language setting to us_english.
english
-----------------------
2013-03-08 00:00:00.000
Changed language setting to British.
british
-----------------------
2013-08-03 00:00:00.000
Use
WHERE BARCODE='25405187' AND DATA = '20130308 00:00:00.000'
Or more simply
WHERE BARCODE='25405187' AND DATA = '20130308'