GO е като края на скрипт.
Можете да имате няколко CREATE TABLE израза, разделени от GO. Това е начин за изолиране на една част от скрипта от друга, но изпращането на всичко в един блок.
BEGIN и END са точно като { и } в C/++/#, Java и т.н.
Те обвързаха логически блок код. Склонен съм да използвам BEGIN и END в началото и края на съхранена процедура, но това не е строго необходимо там. Където Е необходимо е за цикли, IF оператори и т.н., където имате нужда от повече от една стъпка...
IF EXISTS (SELECT * FROM my_table WHERE id = @id)
BEGIN
INSERT INTO Log SELECT @id, 'deleted'
DELETE my_table WHERE id = @id
END