**Describe the bug**
Using a `NULL` tuple as a left operand with a chained or operands produce an invalid ClickHouse filtering.

**Does it reproduce on recent release?**
Can be reproduced with `21.2.2.8`

**How to reproduce**
```
SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1)

Received exception from server (version 21.2.2):
Code: 53. DB::Exception: Received from 127.0.0.1:10000. DB::Exception: Type mismatch in IN or VALUES section. Expected: Nothing. Got: UInt64: While processing (NULL, NULL) IN ((0, 0), (3, 1), (3, 2), (8, 0)). 
```

**Expected behavior**
It should return `NULL`, or at least the same output as `equals(tuple(NULL, NULL), tuple(3, 2))`
{
        
        const IDataType * type_to_parse = &type;
        DataTypePtr holder;
        if (type.canBePromoted())
        {
            holder = type.promoteNumericType();
            type_to_parse = holder.get();
        }
        const auto col = type_to_parse->createColumn();
        ReadBufferFromString in_buffer(src.get<String>());
        try
        {
            type_to_parse->deserializeAsWholeText(*col, in_buffer, FormatSettings{});
        }
        catch (Exception & e)
        {
            e.addMessage(fmt::format("while converting '{}' to {}", src.get<String>(), type.getName()));
            throw;
        }
        if (!in_buffer.eof())
            throw Exception(ErrorCodes::TYPE_MISMATCH, "Cannot convert string {} to type {}", src.get<String>(), type.getName());
        Field parsed = (*col)[0];
        return convertFieldToType(parsed, type, from_type_hint);
    }
    throw Exception("Type mismatch in IN or VALUES section. Expected: " + type.getName() + ". Got: "
        + Field::Types::toString(src.getType()), ErrorCodes::TYPE_MISMATCH);
}
}
Field convertFieldToType(const Field & from_value, const IDataType & to_type, const IDataType * from_type_hint)