Here are a few that I like:
SQL::Abstract (no joins last I looked),
SQL::Interpolate (can do anything, but a bit confusing),
Rose::DB::Object::QueryBuilder (can do most things and has a nice interface). Incidentally, there's no need to use Rose::DB::Object just to use the QueryBuilder. I've used it on its own.