Just speculating, but this is what I came across when I started to work with Laravel:
When Laravel runs migrations, it saves the status to a migrations table in the database. If a migration fails, it tries to run the rollback() method in the migration and sets the status to failed.
Now, if the rollback() method does for some reason not really rollback the changes made in the migration, Laravel thinks the migration has been rolled back, although it really hasn't.
So, with the next migrate command, it tries to run the migration again (because it's status in the DB is failed).
If the migration happens to create a table, and the rollback does not drop that table, this could lead to the behaviour you described, if the migration fails and the rollback does not actually roll back the change.
To fix this, first empty out the entire DB and run php artisan migrate again. Then go over your migrations and fix any rollback() methods. Make sure you can run php artisan migrate:reset(will rollback everything) without any errors, leaving you with an empty database.