Chance of duplicate on single select max into statement
Assuming that you allow multiple users in your application, max()+1 will guarantee that you will get duplicate values.  Therefore, it is a bad practice.  It's also less efficient but that is a lesser concern.  If you have two sessions, session 1 gets the max() + 1, and session 2 tries to get the max() + 1 before session 1 commits (or rolls back), session 2 will get the same value that was given to session 1.

Using a sequence will eliminate the possibility of duplicates.  Use a sequence.