There is a difference in SQL*Plus between the meaning of /and; because they perform in a different manner.
The ; is used to end the SQL statement, Whereas the / is used to execute whatever is in the current "buffer". Therefore, when you use; and / the statement gets executed twice.
You can observe using a / after running a statement:
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:37:20 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Which are connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and OLAP options
SQL> drop table foo;
The above code is used for dropping the Table.
SQL> /
drop table foo
*
ERROR at line 1:
ORA-00942: Here, table or view does not exist
In the above case, one can easily notice the error.
But assume that there is a SQL script like this:
drop table foo;
/
Here, / is the run from within SQL*Plus then this will be very confusing:
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:38:05 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
It is connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and the OLAP options like this
SQL> @drop
The table is dropped.
drop table foo
*
ERROR at line 1:
ORA-00942: table or view does not exist
Here, the / is mainly required in order to run statements that have embedded; like a CREATE PROCEDURE statement.