SlimSavernake, отличие в формируемых запросах.
"joinWith" и "innerJoinWith" формируют один запрос, а просто "with" формирует два:
$categories = Category::find()->with('products')->all();
// select * from categories -- первый запрос выбирает категории
// select * from products where category_id in (...) -- второй - "загружает" в выбранные категории продукты
$categories = Category::find()->joinWith('products')->all();
// select categories.*
// from categories
// left outer join products on products.category_id = categories.id
innerJoinWith отличается от joinWith тем, что использует inner join, (как следует из названия) а не left outer.
Отсюда очевидная "проблема" у joinWith с пагинацией из-за перемножения строк в таблицах.