[T-SQL]IF EXISTS DML vs. DDL

Sok-sok éve foglalkozom SQL Serverrel, mégis mindig tanulok valami újat.
A következőre keresek magyarázatot:
SQL Server 2014 Enterprise, T-SQL szkript.
Szeretném M oszlopot áttenni A táblából B táblába és feltölteni értékekkel.
A szkript valahogy így néz ki:

-- B tablaban letrehozom az uj mezot, ha meg nem letezik
IF NOT EXISTS(
SELECT 1
FROM sys.columns
WHERE
name = N'M'
AND OBJECT_ID = OBJECT_ID(N'[dbo].[B]')
)
BEGIN
ALTER TABLE [dbo].[B] ADD [M] INT NULL;
END
GO

-- Update B tabla A tabla M mezoje alapjan, ha letezik
IF EXISTS (
SELECT 1
FROM sys.columns
WHERE
name = N'M'
AND OBJECT_ID = OBJECT_ID(N'[dbo].[A]')
)
BEGIN
UPDATE [dbo].[B]
SET
[dbo].[B].[M] = [dbo].[A].[M]
FROM [dbo].[A]
JOIN [dbo].[B]
ON [dbo].[A].Id = [dbo].[B].AId')
END
GO

-- Dobjuk el A tablaban az M mezot, ha letezik
IF EXISTS(
SELECT 1
FROM sys.columns
WHERE
name = N'M'
AND OBJECT_ID = OBJECT_ID(N'[dbo].[A]')
)
BEGIN
ALTER TABLE [dbo].[A] DROP COLUMN M
END

Ezt a kódrészletet elsőre lefuttatva hibaüzenet nélkül végbemegy a módosítás. Viszont mikor másodjára is újrafuttatom, akkor "Invalid column name 'M'." hibaüzenetet kapok, mindezt az UPDATE statement miatt. Az világos, hogy az SQL Server compilere értelmezi az összes utasítást egyesével, viszont akkor az ALTER TABLE-re miért nem dob hibát?
A workaround megvan, az UPDATE-et EXEC() függvényben kell meghívni és úgy már nem jelenik meg hibaüzenet.
Tehát a kérdés: a compiler miért csak DML utasítás esetén dob hibát, DDL-nél miért nem?

UPDATE: A kérdés fordítva is fennáll, ha DDL esetén nem dob hibát, akkor DML esetén miért? Tud valaki mondani olyan szkenáriót, ami jó példa erre?