The set operations INTERSECT and MINUS are all you need for that. I don't know why you say that they are crude -- they are concise, and do exactly what you want.

Do you want instead to create some kind of full outer-join between the two tables, and look for differences (including correct null-handling) between the tables? Forget it.

select count(*) from tablea;

select count(*) from tableb;

if you find a difference there, then you already know there is a problem.

Also try...

select count(*) from
(select * from tablea
intersect
select * from tableb)

.. to see how many rows are exactly the same.