T-SQL is designed to add structure to the handling of sets of data. Because of this, it does not provide several language features that application development needs. If you do a lot of application programming development, you'll find that T-SQL is in many ways the exact opposite of how you think when programming in VB, C#, Java, or any other structured development language.
A query is a single SQL DML statement, and a batch is a collection of one or more T-SQL statements. The entire collection is sent to SQL Server from the front-end application as a single unit of code.
SQL Server parses the entire batch as a unit. Any syntax error will cause the entire batch to fail, meaning that none of the batch executes. However, the parsing does not check any object names or schemas because a schema may change by the time the statement executes.
A SQL script file or a Query Analyzer window may contain multiple batches. If this is the case, a batch-separator keyword terminates each batch. By default, the batch-separator keyword is GO (similar to how the Start button is used to shut down Windows). The batch-separator keyword must be the only keyword in the line. ...