Buenas a to er mundo.
a) un trigger before, la palabrita "before", lo dice claramente en englies pitinglis, antes de..., por lo que es imposible que devuelva una excepción por duplicidad de clave, ya que aun no se ha producido la actualización del registro en la tabla.
b) con el after, sucede lo mismo. Se ejecuta despues de actualizar el registro en la tabla.
Posibles controles a realizar:
a) En el trigger, realizar una búsqueda del registro y generar la excepción si se duplica.
b) Que sea la BD quien controle la duplicidad y controlar el error en la aplicación.
Personalmente me decanto por el segundo caso "b)".