Reproduction example:

```(sql)
SET join_use_nulls = 0;

create or replace view
  some_test_view
as
select *
from
  (
    select
      arrayJoin([1, 2]) as a,
      arrayJoin([11, 12]) as b
  ) as t1
  full join
  (
    select
      arrayJoin([2, 3]) as a,
      arrayJoin([22, 23]) as c
  ) as t2
  using a
order by a
```

In `describe table some_test_view` the resulting columns are non-nullable, as expected.

However, changing the setting and selecting from the view:

```(sql)
SET join_use_nulls = 1;
select * from some_test_view
```

Results in an error: `Code: 349, e.displayText() = DB::Exception: Cannot convert NULL value to non-Nullable type: while converting source column c to destination column c: while executing 'FUNCTION CAST(c :: 2, UInt8 :: 5) -> CAST(c, UInt8) UInt8 : 4' (version 21.2.3.15 (official build))`

There's no clearly-good solution to this problem;
one of the suggestions is to add the setting to the view schema, e.g.:

```(sql)
SET join_use_nulls = 0;

create or replace view
  some_test_view
as
select *
from
  (
    select
      arrayJoin([1, 2]) as a,
      arrayJoin([11, 12]) as b
  ) as t1
  full join
  (
    select
      arrayJoin([2, 3]) as a,
      arrayJoin([22, 23]) as c
  ) as t2
  using a
order by a
settings join_use_nulls = 0  -- prevent the join behavior inside the view from changing
```

which could be done implicitly by CH to improve the user experience.

Side note: `… settings join_use_nulls = …` seems to be poorly documented, only appearing in a few examples without any explanation.

{
        
        Position,
        
        Name,
    };