diff --git a/src/select-query-parser.ts b/src/select-query-parser.ts
index 5c682117..9567b1c9 100644
--- a/src/select-query-parser.ts
+++ b/src/select-query-parser.ts
@@ -231,7 +231,9 @@ type ConstructFieldDefinition<
           ? Child | null
           : Relationships extends unknown[]
           ? HasFKey<Field['hint'], Relationships> extends true
-            ? Child | null
+            ? Field extends { inner: true }
+              ? Child
+              : Child | null
             : Child[]
           : Child[]
         : never
@@ -260,7 +262,9 @@ type ConstructFieldDefinition<
           ? Child | null
           : Relationships extends unknown[]
           ? HasFKeyToFRel<Field['original'], Relationships> extends true
-            ? Child | null
+            ? Field extends { inner: true }
+              ? Child
+              : Child | null
             : Child[]
           : Child[]
         : never
@@ -351,7 +355,7 @@ type ParseField<Input extends string> = Input extends ''
   ? EatWhitespace<Remainder> extends `!inner${infer Remainder}`
     ? ParseEmbeddedResource<EatWhitespace<Remainder>> extends [infer Fields, `${infer Remainder}`]
       ? // `field!inner(nodes)`
-        [{ name: Name; original: Name; children: Fields }, EatWhitespace<Remainder>]
+        [{ name: Name; original: Name; children: Fields; inner: true }, EatWhitespace<Remainder>]
       : CreateParserErrorIfRequired<
           ParseEmbeddedResource<EatWhitespace<Remainder>>,
           'Expected embedded resource after `!inner`'
@@ -364,7 +368,10 @@ type ParseField<Input extends string> = Input extends ''
             `${infer Remainder}`
           ]
           ? // `field!hint!inner(nodes)`
-            [{ name: Name; original: Name; hint: Hint; children: Fields }, EatWhitespace<Remainder>]
+            [
+              { name: Name; original: Name; hint: Hint; children: Fields; inner: true },
+              EatWhitespace<Remainder>
+            ]
           : CreateParserErrorIfRequired<
               ParseEmbeddedResource<EatWhitespace<Remainder>>,
               'Expected embedded resource after `!inner`'
diff --git a/test/index.test-d.ts b/test/index.test-d.ts
index b9c24c16..54ee54f3 100644
--- a/test/index.test-d.ts
+++ b/test/index.test-d.ts
@@ -149,6 +149,18 @@ const postgrest = new PostgrestClient<Database>(REST_URL)
   expectType<Database['public']['Tables']['users']['Row'] | null>(message.user)
 }
 
+// !inner relationship
+{
+  const { data: message, error } = await postgrest
+    .from('messages')
+    .select('user:users!inner(*)')
+    .single()
+  if (error) {
+    throw new Error(error.message)
+  }
+  expectType<Database['public']['Tables']['users']['Row']>(message.user)
+}
+
 // one-to-many relationship
 {
   const { data: user, error } = await postgrest.from('users').select('messages(*)').single()