When comparing date-time data types SQL DataCompare first converts certain date-time data types to VARBINARY(MAX) when selecting the data int he source/destination database instead of retaining the original data types.
-- set up reproducible bug table structure and data
USE tempdb;
GO
SET ANSI_NULLS, QUOTED_IDENTIFIER ON;
GO
IF EXISTS ( SELECT  *
            FROM    sys.objects
            WHERE   object_id = OBJECT_ID(N'[dbo].[RedGateTableDATE]')
                    AND type IN (N'U') )
  DROP TABLE dbo.RedGateTableDATE;
GO
CREATE TABLE dbo.RedGateTableDATE (RedGateTableDATEID INT IDENTITY(1, 1)
                                                          NOT NULL
                                 , loaddateDTM2 DATETIME2 NOT NULL
                                 , loaddateDTM DATETIME NOT NULL
                                 , loaddateDTMO DATETIMEOFFSET NOT NULL
                                 , loaddateSDTM SMALLDATETIME NOT NULL
                                 , loaddateDT DATE NOT NULL
                                 , loaddateTM TIME NOT NULL
                                 , CONSTRAINT PK_dbo_RedGateTableDATE PRIMARY KEY CLUSTERED (RedGateTableDATEID ASC) ON [PRIMARY])
ON
  [PRIMARY];
GO
DECLARE @MaxNumber INT = 1000000;
WITH  Pass0
        AS (SELECT  1 AS C
            UNION ALL
            SELECT  1) , --2 rows
      Pass1
        AS (SELECT  1 AS C
            FROM    Pass0 AS A
                  , Pass0 AS B) ,--4 rows
      Pass2
        AS (SELECT  1 AS C
            FROM    Pass1 AS A
                  , Pass1 AS B) ,--16 rows
      Pass3
        AS (SELECT  1 AS C
            FROM    Pass2 AS A
                  , Pass2 AS B) ,--256 rows
      Pass4
        AS (SELECT  1 AS C
            FROM    Pass3 AS A
                  , Pass3 AS B) ,--65536 rows
      Pass5
        AS (SELECT  1 AS C
            FROM    Pass4 AS A
                  , Pass4 AS B) ,--4,294,967,296 rows
      Tally
        AS (SELECT  ROW_NUMBER() OVER (ORDER BY Pass5.C) AS Number
            FROM    Pass5)
  INSERT  INTO dbo.RedGateTableDATE
          (loaddateDTM2
         , loaddateDTM
         , loaddateDTMO
         , loaddateSDTM
         , loaddateDT
         , loaddateTM
          )
  SELECT  CAST(GETDATE() AS DATETIME2) AS loaddateDTM2
        , CAST(GETDATE() AS DATETIME) AS loaddateDTM
        , CAST(GETDATE() AS DATETIMEOFFSET) AS loaddateDTMO
        , CAST(GETDATE() AS SMALLDATETIME) AS loaddateSDTM
        , CAST(GETDATE() AS DATE) AS loaddateDT
        , CAST(GETDATE() AS TIME) AS loaddateTM
  FROM    Tally t
  WHERE   t.Number <= @MaxNumber;
-- display the data
SELECT TOP 100
        t.RedGateTableDATEID
      , t.loaddateDTM2
      , t.loaddateDTM
      , t.loaddateDTMO
      , t.loaddateSDTM
      , t.loaddateDT
      , t.loaddateTM
FROM    dbo.RedGateTableDATE t;
-- SELECT query run by SQL Datacompare 12.0.32.3340 - force binary collation on/off does not make a difference
SELECT  RedGateTableDATEID
      , CAST (loaddateDTM2 AS VARBINARY(MAX))
      , loaddateDTM
      , CAST (loaddateDTMO AS VARBINARY(MAX))
      , loaddateSDTM
      , CAST (loaddateDT AS VARBINARY(MAX))
      , CAST (loaddateTM AS VARBINARY(MAX))
FROM    dbo.RedGateTableDATE WITH (NOLOCK)
ORDER BY RedGateTableDATEID;
       
      
      
      
      
      
      
        
-- set up reproducible bug table structure and data USE tempdb; GO SET ANSI_NULLS, QUOTED_IDENTIFIER ON; GO IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[RedGateTableDATE]') AND type IN (N'U') ) DROP TABLE dbo.RedGateTableDATE; GO CREATE TABLE dbo.RedGateTableDATE (RedGateTableDATEID INT IDENTITY(1, 1) NOT NULL , loaddateDTM2 DATETIME2 NOT NULL , loaddateDTM DATETIME NOT NULL , loaddateDTMO DATETIMEOFFSET NOT NULL , loaddateSDTM SMALLDATETIME NOT NULL , loaddateDT DATE NOT NULL , loaddateTM TIME NOT NULL , CONSTRAINT PK_dbo_RedGateTableDATE PRIMARY KEY CLUSTERED (RedGateTableDATEID ASC) ON [PRIMARY]) ON [PRIMARY]; GO DECLARE @MaxNumber INT = 1000000; WITH Pass0 AS (SELECT 1 AS C UNION ALL SELECT 1) , --2 rows Pass1 AS (SELECT 1 AS C FROM Pass0 AS A , Pass0 AS B) ,--4 rows Pass2 AS (SELECT 1 AS C FROM Pass1 AS A , Pass1 AS B) ,--16 rows Pass3 AS (SELECT 1 AS C FROM Pass2 AS A , Pass2 AS B) ,--256 rows Pass4 AS (SELECT 1 AS C FROM Pass3 AS A , Pass3 AS B) ,--65536 rows Pass5 AS (SELECT 1 AS C FROM Pass4 AS A , Pass4 AS B) ,--4,294,967,296 rows Tally AS (SELECT ROW_NUMBER() OVER (ORDER BY Pass5.C) AS Number FROM Pass5) INSERT INTO dbo.RedGateTableDATE (loaddateDTM2 , loaddateDTM , loaddateDTMO , loaddateSDTM , loaddateDT , loaddateTM ) SELECT CAST(GETDATE() AS DATETIME2) AS loaddateDTM2 , CAST(GETDATE() AS DATETIME) AS loaddateDTM , CAST(GETDATE() AS DATETIMEOFFSET) AS loaddateDTMO , CAST(GETDATE() AS SMALLDATETIME) AS loaddateSDTM , CAST(GETDATE() AS DATE) AS loaddateDT , CAST(GETDATE() AS TIME) AS loaddateTM FROM Tally t WHERE t.Number <= @MaxNumber; -- display the data SELECT TOP 100 t.RedGateTableDATEID , t.loaddateDTM2 , t.loaddateDTM , t.loaddateDTMO , t.loaddateSDTM , t.loaddateDT , t.loaddateTM FROM dbo.RedGateTableDATE t; -- SELECT query run by SQL Datacompare 12.0.32.3340 - force binary collation on/off does not make a difference SELECT RedGateTableDATEID , CAST (loaddateDTM2 AS VARBINARY(MAX)) , loaddateDTM , CAST (loaddateDTMO AS VARBINARY(MAX)) , loaddateSDTM , CAST (loaddateDT AS VARBINARY(MAX)) , CAST (loaddateTM AS VARBINARY(MAX)) FROM dbo.RedGateTableDATE WITH (NOLOCK) ORDER BY RedGateTableDATEID;