Der Unterschied ist semantisch und grammatikalisch:
Oh, stets mit einem Komma vom Rest des Satzes getrennt, ist eine Interjektion und wird als Ausdruck der Überraschung, Erkenntnis etc. (unwillkürlich) verwendet. ("Oh, das wusste ich nicht!", "Oh! Das tut mir leid.")
O, stets in Verbindung mit einem weiteren Wort ohne Komma dazwischen, ist eine Exklamation, ein (bewusster) Ausruf, eine Anrufung usw. ("O nein!", "Vergib mir, o Herr!")
Eine Gemeinsamkeit besteht darin, dass beides mit einem Ausrufezeichen abgeschlossen wird.
Da das heutige Sprachverständnis generell, auch in akademischen Kreisen, ein unreflektiertes ist, wird 'oh' oftmals (fälschlicherweise) synonym zu 'o' verwendet, welches heute kaum noch einer kennt. Der Rechtschreibduden ist übrigens seit 1996 nicht mehr verbindlich und das ist bei seinem rapiden Qualitätsverlust aus sprachwissenschaftlicher Sicht ein Segen.