diff --git a/changelogs/unreleased/gh-6167-select-with-dict.md b/changelogs/unreleased/gh-6167-select-with-dict.md
new file mode 100644
index 0000000000000000000000000000000000000000..edf2d1047b1e192f817773799b2715c7b3ae2715
--- /dev/null
+++ b/changelogs/unreleased/gh-6167-select-with-dict.md
@@ -0,0 +1,3 @@
+## bugfix/memtx
+
+* Now memtx will raise an error if "clear" dictionary was passed to s:select() (gh-6167)
diff --git a/src/box/lua/tuple.lua b/src/box/lua/tuple.lua
index f47b5926d695968d157de85956714b1d1915f593..98f3f8de63ca430bb56fc89b286e640617a0b722 100644
--- a/src/box/lua/tuple.lua
+++ b/src/box/lua/tuple.lua
@@ -79,8 +79,13 @@ local tuple_encode = function(tmpbuf, obj)
     elseif is_tuple(obj) then
         encode_r(tmpbuf, obj, 1)
     elseif type(obj) == "table" then
-        encode_array(tmpbuf, #obj)
-        for i = 1, #obj, 1 do
+        local obj_size = #obj
+        if obj_size == 0 and not rawequal(next(obj), nil) then
+            -- dictionary cannot represent a tuple
+            return box.error(box.error.TUPLE_NOT_ARRAY)
+        end
+        encode_array(tmpbuf, obj_size)
+        for i = 1, obj_size, 1 do
             encode_r(tmpbuf, obj[i], 1)
         end
     else
diff --git a/test/box/gh-6167-select-with-dict.result b/test/box/gh-6167-select-with-dict.result
new file mode 100644
index 0000000000000000000000000000000000000000..249c18f99b71cd331dec6b0bae8c5736da754cb6
--- /dev/null
+++ b/test/box/gh-6167-select-with-dict.result
@@ -0,0 +1,26 @@
+-- test-run result file version 2
+s = box.schema.create_space('test')
+ | ---
+ | ...
+_ = s:create_index('pk')
+ | ---
+ | ...
+dict = {key = 'value'}
+ | ---
+ | ...
+-- There must be errors saying tuple must be array
+s:select(dict)
+ | ---
+ | - error: Tuple/Key must be MsgPack array
+ | ...
+s:pairs(dict)
+ | ---
+ | - error: Tuple/Key must be MsgPack array
+ | ...
+s:get(dict)
+ | ---
+ | - error: Tuple/Key must be MsgPack array
+ | ...
+s:drop()
+ | ---
+ | ...
diff --git a/test/box/gh-6167-select-with-dict.test.lua b/test/box/gh-6167-select-with-dict.test.lua
new file mode 100644
index 0000000000000000000000000000000000000000..2c440a6c5de5446040d3f251d4675bff2f703123
--- /dev/null
+++ b/test/box/gh-6167-select-with-dict.test.lua
@@ -0,0 +1,8 @@
+s = box.schema.create_space('test')
+_ = s:create_index('pk')
+dict = {key = 'value'}
+-- There must be errors saying tuple must be array
+s:select(dict)
+s:pairs(dict)
+s:get(dict)
+s:drop()