@George is correct that your two examples are functionally different in a way which has nothing to do with join
vs non-join
, however. But you could just as easily write:
var redProducts = context.Category
.Where(c => c.Name == "red")
.SelectMany(c => c.Products);
…which is functionally identical (but superior from a readability and maintainability POV) to your join
example.