T-SQL CREATE TABLE での FOREIGN KEY の指定で、ドキュメントに載ってない方法で出来た。。

CREATE TABLE (Transact-SQL) | Microsoft Docs

ドキュメントでは、CREATE TABLE での FOREIGN KEY 指定はテーブルで指定する方法と列で指定する方法の2パターンあります。

テーブル

< table_constraint > ::=  
 [ CONSTRAINT constraint_name ]  
{    
   { PRIMARY KEY | UNIQUE }  
     {   
       NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])  
       | NONCLUSTERED HASH (column [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )   
                    }   
    | FOREIGN KEY   
        ( column [ ,...n ] )   
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
    | CHECK ( logical_expression )   
}  

列(通常の列と計算列)

<column_constraint> ::=   
[ CONSTRAINT constraint_name ]   
{     { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [   
            WITH FILLFACTOR = fillfactor    
          | WITH ( < index_option > [ , ...n ] )   
        ]   
        [ ON { partition_scheme_name ( partition_column_name )   
            | filegroup | "default" } ]  

  | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   

  | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   
}

<computed_column_definition> ::=  
column_name AS computed_column_expression   
[ PERSISTED [ NOT NULL ] ]  
[   
    [ CONSTRAINT constraint_name ]  
    { PRIMARY KEY | UNIQUE }  
        [ CLUSTERED | NONCLUSTERED ]  
        [   
            WITH FILLFACTOR = fillfactor   
          | WITH ( <index_option> [ , ...n ] )  
        ]  
        [ ON { partition_scheme_name ( partition_column_name )   
        | filegroup | "default" } ]  

    | [ FOREIGN KEY ]   
        REFERENCES referenced_table_name [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE } ]   
        [ ON UPDATE { NO ACTION } ]   
        [ NOT FOR REPLICATION ]   

    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   
]   

テーブルで指定するときは、自分の列と相手の列を指定する、
列で指定するときは、相手の列を指定する感じです。

ところで次の3つのクエリは全部同じ結果になります。

1: table_constraint で指定した場合

drop table if exists [Child]
drop table if exists [Parent]

create table [Parent] (
  [Id] int not null primary key
)
create table [Child] (
  [Id] int not null primary key, 
  [ParentId] int not null, 
  [Remark] nvarchar(max), 
  foreign key ([ParentId]) references [Parent]([Id])
)

2: column_constraint で指定した場合

drop table if exists [Child]
drop table if exists [Parent]

create table [Parent] (
  [Id] int not null primary key
)
create table [Child] (
  [Id] int not null primary key, 
  [ParentId] int not null foreign key references [Parent]([Id]),  
  [Remark] nvarchar(max)
)

3: column_constraint で指定した場合(他の列で指定している!)

drop table if exists [Child]
drop table if exists [Parent]

create table [Parent] (
  [Id] int not null primary key
)
create table [Child] (
  [Id] int not null primary key foreign key([ParentId]) references [Parent]([Id]), 
  [ParentId] int not null,   
  [Remark] nvarchar(max)
)

3: のパターンは、ドキュメントでは指定出来ないはずなんだけどどうなんですかね?
バグだったとしても実害はないでしょうけど。