Even if you stick to ordinary (inner) joins, they are pullbacks, not products.
https://en.wikipedia.org/wiki/Pullback