**Describe the bug**
columns('regexp') didn't return all columns by regexp where 3+ joins in query 

**Does it reproduce on recent release?**
version 21.3.4 revision 54447

**How to reproduce**

in query we have 3 columns 'test' but returned only one:

```
select columns('test') from                                                                                                                                                               
(select 1 as id, 'a' as test) a                                                                                                                                                                    
left join (select 1 as id, 'b' as test) b on b.id = a.id                                                                                                                                               
left join (select 1 as id, 'c' as test) c on c.id = a.id;                                                                                                                                               
                                                                                                                               
Query id: 2fc3ebdf-8ec9-4684-af02-3b87bfe18705
                                                   
┌─test─┐                                           
│ c    │                                           
└──────┘                                           
                                                   
1 rows in set. Elapsed: 0.007 sec.
```

but if we change query:

```
select  columns('test'), a.test as t1, b.test as t2, c.test as t3 from 
(select 1 as id, 'a' as test) a 
left join (select 1 as id, 'b' as test) b on b.id = a.id 
left join (select 1 as id, 'c' as test) c on c.id = a.id

Query id: 5bf07e05-ec0e-4017-853d-b7b23b8a6b16

┌─--a.test─┬─--b.test─┬─test─┬─t1─┬─t2─┬─t3─┐
│ a        │ b        │ c    │ a  │ b  │ c  │
└──────────┴──────────┴──────┴────┴────┴────┘

1 rows in set. Elapsed: 0.006 sec.
```
CollectColumnIdentifiersVisitor(data_using_identifiers).visit(join.using_expression_list);
            }
        }
    }
    
    for (auto & expr : on_aliases)
    {
        CheckAliasDependencyVisitor::Data check{data.aliases};
        CheckAliasDependencyVisitor(check).visit(expr.second);
        if (check.dependency)
            throw Exception("Cannot rewrite JOINs. Alias '" + expr.first +
                            "' used in ON section depends on another alias '" + check.dependency->name() + "'",
                            ErrorCodes::NOT_IMPLEMENTED);
    }
    
    for (auto * ident : using_identifiers)
        if (on_aliases.count(ident->name()))
            throw Exception("Cannot rewrite JOINs. Alias '" + ident->name() + "' appears both in ON and USING", ErrorCodes::NOT_IMPLEMENTED);
    using_identifiers.clear();
    
    RewriteWithAliasVisitor(on_aliases).visit(ast);
    on_aliases.clear();
    
    std::unordered_set<ASTIdentifier *> public_identifiers;
    for (auto & top_level_child : select.select()->children)
        if (auto * ident = top_level_child->as<ASTIdentifier>())
            public_identifiers.insert(ident);
    UniqueShortNames unique_names;
    std::vector<TableNeededColumns> needed_columns =
        normalizeColumnNamesExtractNeeded(data.tables, data.aliases, identifiers, public_identifiers, unique_names);