If name of key column equals in both tables in Storage Join `JOIN ON` trows an error:

```
:) CREATE TABLE t1 (x String) ENGINE = TinyLog;

:) CREATE TABLE t2 (x String) ENGINE = Join(ALL, INNER, x);

:) select * from t1 join t2 USING(x);

Ok.

0 rows in set. Elapsed: 0.036 sec.

:) select * from t1 join t2 ON (t1.x == t2.x);

0 rows in set. Elapsed: 0.026 sec.

Received exception from server (version 21.3.1):
Code: 8. DB::Exception: Received from localhost:9000. DB::Exception: Cannot find column `t2.x` in source stream.

```

If secondary column name match we tables cannot be joined with `USING` too:

```
:) CREATE TABLE t1 (x String, y String) ENGINE = TinyLog;

:) CREATE TABLE t2 (x String, y String) ENGINE = Join(ALL, INNER, x);

:) select * from t1 join t2 USING(x);


0 rows in set. Elapsed: 0.027 sec.

Received exception from server (version 21.3.1):
Code: 8. DB::Exception: Received from localhost:9000. DB::Exception: Cannot find column `t2.y` in source stream.

```
constexpr bool left = KIND == ASTTableJoin::Kind::Left;
    constexpr bool right = KIND == ASTTableJoin::Kind::Right;
    constexpr bool inner = KIND == ASTTableJoin::Kind::Inner;
    constexpr bool full = KIND == ASTTableJoin::Kind::Full;
    constexpr bool need_replication = is_all_join || (is_any_join && right) || (is_semi_join && right);
    constexpr bool need_filter = !need_replication && (inner || right || (is_semi_join && left) || (is_anti_join && left));
    
    Columns materialized_keys = JoinCommon::materializeColumns(block, key_names_left);
    ColumnRawPtrs left_key_columns = JoinCommon::getRawPointers(materialized_keys);
    
    ConstNullMapPtr null_map{};
    ColumnPtr null_map_holder = extractNestedColumnsAndNullMap(left_key_columns, null_map);
    size_t existing_columns = block.columns();
    /** If you use FULL or RIGHT JOIN, then the columns from the "left" table must be materialized.
      * Because if they are constants, then in the "not joined" rows, they may have different values
      *  - default values, which can differ from the values of these constants.
      */
    if constexpr (right || full)
    {
        materializeBlockInplace(block);
        if (nullable_left_side)
            JoinCommon::convertColumnsToNullable(block);
    }
    /** For LEFT/INNER JOIN, the saved blocks do not contain keys.
      * For FULL/RIGHT JOIN, the saved blocks contain keys;
      *  but they will not be used at this stage of joining (and will be in `AdderNonJoined`), and they need to be skipped.
      * For ASOF, the last column is used as the ASOF column
      */
    AddedColumns added_columns(block_with_columns_to_add, block, savedBlockSample(), *this, left_key_columns, key_sizes, is_asof_join);
    bool has_required_right_keys = (required_right_keys.columns() != 0);