DataTables can be joined on on a single column to create a new DataTable with the combined columns and rows from each matching the records on the fields specified in the join method. Note, the join's on method returns a DataTable because there is no other transform option. There is no need to call a separate table method to create the table.

var dtSales = new[ 
    {productId: "001", sales: 100},
    {productId: "002", sales: 200},
    {productId: "003", sales: 300}
var dtProduct = new[ 
    {Id: "001", Name: "apples"},
    {Id: "002", Name: "oranges"},
    {Id: "003", Name: "bananas"}
// join the sales and product data tables
var table = dtSales.join(dtProduct).on("productId", "Id");
// create a new table from a subset of the fields
table ="Name").as("Product").column("sales").table();

The leftJoin method returns all rows from the left table with the matching rows in the right table. The result is null on the right side when there is no match.

var dtMovies = new[ 
    {id: "01", title: "Office Space"},
    {id: "02", title: "Caddyshack"},
    {id: "03", title: "Animal House"}
var dtMovieComments = new[ 
    {id: "01", comment: "I have a case of the Monday's"},
    {id: "02", comment: "Kill all the golfers?"}
// join the tables - second column reference not needed as they have the same name
var table = dtSales.leftJoin(dtProduct).on("id");
// create a new table from a subset of the fields
table ="title", "comment").table();