DECLARE @StartTime DATETIME SET @StartTime = GETDATE() DECLARE @i INT SET @i = 0 WHILE (@i < 1000000) BEGIN DECLARE @A SQL_VARIANT DECLARE @B SQL_VARIANT IF RAND() < 0.1 SET @A = NULL ELSE SET @A = RAND() IF RAND() > 0.9 IF RAND() < 0.1 SET @B = NULL ELSE SET @B = RAND() ELSE SET @B = @A -- Test 1 IF (@A <> @B) OR (@A IS NULL AND @B IS NOT NULL) OR (@A IS NOT NULL AND @B IS NULL) SET @i = @i + 1 ELSE SET @i = @i + 1 -- End test 1 -- Test 2 -- IF EXISTS (SELECT @A EXCEPT SELECT @B) SET @i = @i + 1 ELSE SET @i = @i + 1 -- End test 2 -- Test 3 -- IF (@A = @B) GOTO Equal ELSE IF @A IS NULL AND @B IS NULL GOTO Equal --NotEqual: --Equal: -- SET @i = @i + 1 -- End Test3 -- Test 4 --IF (ISNULL(@A, 0) <> ISNULL(@B, 0)) SET @i = @i + 1 ELSE SET @i = @i + 1 -- End Test 4 END PRINT DATEDIFF(ms, @StartTime, GETDATE()) -- IF (@A <> @B) OR (@A IS NULL AND @B IS NOT NULL) OR (@A IS NOT NULL AND @B IS NULL) -- 4133 -- 3650 -- 3976 -- 3866 -- 3616 -- AVG = 3848 -- IF EXISTS (SELECT @A EXCEPT SELECT @B) -- 7690 -- 7486 -- 7876 -- 7676 -- 8253 -- AVG = 7796 -- IF (@A = @B) GOTO Equal ELSE IF @A IS NULL AND @B IS NULL GOTO Equal -- 3933 -- 4586 -- 4326 -- 4086 -- 3713 -- AVG = 4140 -- IF (ISNULL(@A, 0) <> ISNULL(@B, 0)) SET @i = @i + 1 ELSE SET @i = @i + 1 -- 3636 -- 3913 -- 3763 -- 3973 -- 4426 -- AVG = 3942