Can’t compare lookup and joiner since each has its own functions. Sometimes joiner gives more performance and sometimes lookups.
In case of Flat file, generally, sorted joiner is more effective than lookup, because sorted joiner uses join conditions and caches less rows. Lookup caches always whole file. If the file is not sorted, it can be comparable.
In case of database, lookup can be effective if the database can return sorted data fast and the amount of data is small, because lookup can create whole cache in memory. If database responses slowly or big amount of data are processed, lookup cache initialization can be really slow .Then it can be better use sorted joiner, which throws data to output as reads them on input.