More elegant would be to use MapThread if you want to do 'deeper' threading, Thread does not have a a level-specification.
amat = {{a11, a12}, {a21, a22}, {a31, a32}, {a41, a42}};
bmat = {{b11, b12}, {b21, b22}, {b31, b32}, {b41, b42}};
MapThread[Equal, {amat, bmat}, 2]
Join @@ %
Join @@ can also be replaced by Catenate@ or Flatten@, whatever you like...