Linq Select and SelectMany performing joins
<blockquote>
  <p>C# 6.0 in a Nutshell by Joseph Albahari and Ben Albahari (O’Reilly).</p>
  
  <p>Copyright 2016 Joseph Albahari and Ben Albahari, 978-1-491-92706-9.</p>
</blockquote>

<p>Exposes, in chapter 9, on Linq Operators. For each operation, such as filtering, projecting, joining, etc, it lists the extension methods available in System.Linq to perform the operation in question.</p>

<p>At page 394, it deals with projecting: </p>

<blockquote>
  <p><strong>Projecting</strong> (Input: <code>IEnumerable&lt;TSource&gt;</code> → Output: <code>IEnumerable&lt;TResult&gt;</code>)</p>
  
  <p>Transforms each element with a lambda function. SelectMany flattens
  nested sequences; <code>Select</code> <strong>and</strong> <code>SelectMany</code> perform inner joins, left
  outer joins, cross joins, and non-equi joins with LINQ to SQL and EF:</p>
  
  <p><strong>Linq API</strong>: Select, SelectMany</p>
</blockquote>

<p>Intuitively, its much easier to see how <code>SelectMany</code> is equivalent to joining in relational databases, but what about <code>Select</code> alone ? I'm not sure I see how Select alone can do any sort of joining. </p>

<p>Could it be that the only case where <code>Select</code> does something equivalent to a join is like</p>

<pre><code>IEnumerable&lt;TInput&gt; input = ...

input.Select(new [SomeType] { a = input.a + c, b = input.a + d }; 
</code></pre>

<p>It could be said then that this <code>Projection</code> is implicitly defining a relation between type <code>TInput</code> and <code>SomeType</code>, and thus representing a join ? Am I right ?</p>