diff --git a/src/executor/DeleteVertexExecutor.cpp b/src/executor/DeleteVertexExecutor.cpp
index b9d21af6388f0beba579bfbc90ca54827e1faea9..c0d9a01dec38f4370ec197b24996790525fa4224 100644
--- a/src/executor/DeleteVertexExecutor.cpp
+++ b/src/executor/DeleteVertexExecutor.cpp
@@ -33,7 +33,7 @@ Status DeleteVertexExecutor::prepare() {
 }
 
 void DeleteVertexExecutor::execute() {
-    // TODO(zlcook) Get edgeKes of a vertex by Go
+    // TODO(zlcook) Get edgeKeys of a vertex by Go
     auto future = ectx()->getStorageClient()->getEdgeKeys(spaceId_, vid_);
     auto *runner = ectx()->rctx()->runner();
     auto cb = [this] (auto &&resp) {
@@ -53,7 +53,11 @@ void DeleteVertexExecutor::execute() {
             allEdges.emplace_back(std::move(edge));
             allEdges.emplace_back(std::move(reverseEdge));
         }
-        deleteEdges(&allEdges);
+        if (allEdges.size() > 0) {
+            deleteEdges(&allEdges);
+        } else {
+            deleteVertex();
+        }
         return;
     };
 
diff --git a/src/executor/test/DeleteVertexTest.cpp b/src/executor/test/DeleteVertexTest.cpp
index 9bddff72f059d9ddc3f6a465ec37f7787c8da71a..2fd691d2883041239ae3f3ecc96549ff8e6b6d91 100644
--- a/src/executor/test/DeleteVertexTest.cpp
+++ b/src/executor/test/DeleteVertexTest.cpp
@@ -163,6 +163,40 @@ TEST_F(DeleteVertexTest, base) {
         };
         ASSERT_TRUE(verifyResult(resp, expected));
     }
+
+    // Delete non-existing vertex
+    {
+        cpp2::ExecutionResponse resp;
+        auto query = "DELETE VERTEX uuid(\"Non-existing Vertex\")";
+        auto code = client_->execute(query, resp);
+        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
+    }
+
+    // Delete a vertex without edges
+    {
+        // Insert a vertex without edges
+        cpp2::ExecutionResponse resp;
+        auto query = "INSERT VERTEX player(name, age) "
+                     "VALUES uuid(\"A Loner\"): (\"A Loner\", 0)";
+        auto code = client_->execute(query, resp);
+        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
+    }
+    {
+        cpp2::ExecutionResponse resp;
+        auto query = "DELETE VERTEX uuid(\"A Loner\")";
+        auto code = client_->execute(query, resp);
+        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
+    }
+    {
+        cpp2::ExecutionResponse resp;
+        auto query = "FETCH PROP ON player uuid(\"A Loner\") "
+                     "YIELD player.name, player.age";
+        auto code = client_->execute(query, resp);
+        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
+        std::vector<std::tuple<std::string, int64_t>> expected = {
+        };
+        ASSERT_TRUE(verifyResult(resp, expected));
+    }
 }
 
 }  // namespace graph