**Describe the bug**
```
milovidov-desktop :) SET allow_experimental_analyzer = 1

SET allow_experimental_analyzer = 1

Query id: b4494b8c-9f14-4d46-8db9-2cb992dcfcb6

Ok.

0 rows in set. Elapsed: 0.001 sec. 

milovidov-desktop :) SELECT arrayFilter(x -> notEmpty(concat(x)), [NULL, NULL]) FROM system.one ARRAY JOIN [1048577] AS elem, arrayMap(x -> concat(x, elem, ''), ['']) AS unused

SELECT arrayFilter(x -> notEmpty(concat(x)), [NULL, NULL])
FROM system.one
ARRAY JOIN
    [1048577] AS elem,
    arrayMap(x -> concat(x, elem, ''), ['']) AS unused

Query id: ca118c75-812b-4c83-bd30-1af64ed38635


0 rows in set. Elapsed: 0.003 sec. 

Received exception from server (version 22.13.1):
Code: 49. DB::Exception: Received from localhost:9000. DB::Exception: Cannot capture column 3 because it has incompatible type: got Array(UInt32), but UInt32 is expected.. (LOGICAL_ERROR)
```
* For array join continue processing.
      * For join node combine last left and right table expressions columns on stack together. It is important that if JOIN has USING
      * we must add USING columns before combining left and right table expressions columns. Columns from left and right table
      * expressions that have same names as columns in USING clause must be skipped.
      */
    auto table_expressions_stack = buildTableExpressionsStack(nearest_query_scope_query_node->getJoinTree());
    std::vector<QueryTreeNodesWithNames> table_expressions_column_nodes_with_names_stack;
    std::unordered_set<std::string> left_table_expression_column_names_to_skip;
    std::unordered_set<std::string> right_table_expression_column_names_to_skip;
    for (auto & table_expression : table_expressions_stack)
    {
        QueryTreeNodesWithNames matched_expression_nodes_with_column_names;
        if (auto * array_join_node = table_expression->as<ArrayJoinNode>())
        {
            if (table_expressions_column_nodes_with_names_stack.empty())
                throw Exception(ErrorCodes::LOGICAL_ERROR,
                    "Expected at least 1 table expressions on stack before ARRAY JOIN processing");
            auto & table_expression_column_nodes_with_names = table_expressions_column_nodes_with_names_stack.back();
            const auto & array_join_column_list = array_join_node->getJoinExpressions();
            const auto & array_join_column_nodes = array_join_column_list.getNodes();
            /** Special case with ARRAY JOIN column without alias.
              *
              * CREATE TABLE test_table (id UInt64, value String, value_array Array(UInt8)) ENGINE=TinyLog;
              * SELECT * FROM test_table ARRAY JOIN value_array;
              *
              * In matched columns `value_array` must be resolved into array join column.
              */
            for (const auto & array_join_column_node : array_join_column_nodes)
            {
                if (array_join_column_node->hasAlias())