difference between assingment and :
The second expression is syntactically invalid (at least on its own, it could be a valid part of some other expression).

sal := sal + 300;


assigns a value to the local variable sal that is 300 more than the current value of that variable.

sal = sal + 300


does not change the value of sal.  It compares sal to sal + 300 and evaluates to a boolean.  But it would only be valid in something like an if statement or in a SQL statement, i.e.

IF( sal = sal + 300 )


or 

SELECT *
  FROM emp
 WHERE sal = sal + 300


Neither of those really make sense, though, since that is, by definition, not going to evaluate to true.