diff --git a/src/box/sql/build.c b/src/box/sql/build.c
index 5b3348bd219f79725f0af6b4e3e673d31a1a05e3..9c9a6d9e13a28715a7237eb2f7436782b10ca9df 100644
--- a/src/box/sql/build.c
+++ b/src/box/sql/build.c
@@ -1415,7 +1415,8 @@ vdbe_emit_fkey_create(struct Parse *parse_context, const struct fkey_def *fk)
 			  constr_tuple_reg + 9);
 	sqlite3VdbeAddOp3(vdbe, OP_SInsert, BOX_FK_CONSTRAINT_ID, 0,
 			  constr_tuple_reg + 9);
-	sqlite3VdbeChangeP5(vdbe, OPFLAG_NCHANGE);
+	if (parse_context->pNewTable == NULL)
+		sqlite3VdbeChangeP5(vdbe, OPFLAG_NCHANGE);
 	save_record(parse_context, BOX_FK_CONSTRAINT_ID, constr_tuple_reg, 2,
 		    vdbe->nOp - 1);
 	sqlite3ReleaseTempRange(parse_context, constr_tuple_reg, 10);
@@ -1809,7 +1810,6 @@ vdbe_emit_fkey_drop(struct Parse *parse_context, char *constraint_name,
 	}
 	sqlite3VdbeAddOp3(vdbe, OP_MakeRecord, key_reg, 2, key_reg + 2);
 	sqlite3VdbeAddOp2(vdbe, OP_SDelete, BOX_FK_CONSTRAINT_ID, key_reg + 2);
-	sqlite3VdbeChangeP5(vdbe, OPFLAG_NCHANGE);
 	VdbeComment((vdbe, "Delete FK constraint %s", constraint_name));
 	sqlite3ReleaseTempRange(parse_context, key_reg, 3);
 }
@@ -2268,6 +2268,13 @@ sql_drop_foreign_key(struct Parse *parse_context, struct SrcList *table,
 	if (constraint_name != NULL)
 		vdbe_emit_fkey_drop(parse_context, constraint_name,
 				    child->def->id);
+	/*
+	 * We account changes to row count only if drop of
+	 * foreign keys take place in a separate
+	 * ALTER TABLE DROP CONSTRAINT statement, since whole
+	 * DROP TABLE always returns 1 (one) as a row count.
+	 */
+	sqlite3VdbeChangeP5(sqlite3GetVdbe(parse_context), OPFLAG_NCHANGE);
 }
 
 /*
diff --git a/test/sql/iproto.result b/test/sql/iproto.result
index f390a73a971827117d1655ff01704a1b65a5524d..e75f791106b7053b3a6f0c989dff9b6462c8e103 100644
--- a/test/sql/iproto.result
+++ b/test/sql/iproto.result
@@ -727,9 +727,6 @@ cn:execute('insert into TEST3 values (null), (null), (null), (null)')
   - -29
   rowcount: 4
 ...
-cn:close()
----
-...
 box.sql.execute('drop table test')
 ---
 ...
@@ -742,6 +739,28 @@ sq:drop()
 box.sql.execute('drop table test3')
 ---
 ...
+--
+-- Ensure that FK inside CREATE TABLE does not affect rowcount.
+--
+cn:execute('create table test (id integer primary key)')
+---
+- rowcount: 1
+...
+cn:execute('create table test2 (id integer primary key, ref integer references test)')
+---
+- rowcount: 1
+...
+cn:execute('drop table test2')
+---
+- rowcount: 1
+...
+cn:execute('drop table test')
+---
+- rowcount: 1
+...
+cn:close()
+---
+...
 box.schema.user.revoke('guest', 'read,write,execute', 'universe')
 ---
 ...
diff --git a/test/sql/iproto.test.lua b/test/sql/iproto.test.lua
index a18755b0051dd41ffc606a889e387743fa222bf6..fb5685a9e515bc179edb3ae4ae48f52e21a7cca8 100644
--- a/test/sql/iproto.test.lua
+++ b/test/sql/iproto.test.lua
@@ -225,12 +225,21 @@ box.sql.execute('create table test3 (id int primary key autoincrement)')
 box.schema.sequence.alter('TEST3', {min=-10000, step=-10})
 cn:execute('insert into TEST3 values (null), (null), (null), (null)')
 
-cn:close()
 box.sql.execute('drop table test')
 s:drop()
 sq:drop()
 box.sql.execute('drop table test3')
 
+--
+-- Ensure that FK inside CREATE TABLE does not affect rowcount.
+--
+cn:execute('create table test (id integer primary key)')
+cn:execute('create table test2 (id integer primary key, ref integer references test)')
+cn:execute('drop table test2')
+cn:execute('drop table test')
+
+cn:close()
+
 box.schema.user.revoke('guest', 'read,write,execute', 'universe')
 box.schema.user.revoke('guest', 'create', 'space')
 space = nil